コマンドを実行してすぐに端末を終了するにはどうすればよいですか?


2

私がやろうとしていることはかなり明確になるはずです。

元のscript.sh:

select blah in foo bar oof rab
do
  cmd $blah
  break
done

かなり基本的なもの私が以下を試みるとき、問題は起こります:

> xterm -e 'script.sh'

script.shは、シェルから呼び出されたときに問題なく動作します。しかし、fvwmから呼び出そうとすると、 " cmd $blah msgstr "以下の修正を試みても私には何もしません:

select blah in foo bar oof rab
do
  nohup cmd $blah > /dev/null 2>&1 &
  break
done

希望する機能をどのようにして実現できますか? (つまり、どのようにしてxtermを選択して、バックグラウンドでコマンドが実行されている間に自分自身を強制終了するのに十分な時間ポップアップ表示させることができますか?)


1
「選択を行います」 - スクリプトを実行して端末に出力し、次に出力を選択またはコピーしてから端末を閉じるということですか
Paul

@ポール正確には違います。私は(シェルからではなく)バックグラウンドプロセスを実行するために選択ロジック(kb入力を必要とする)を持つスクリプトのために十分な長さのターミナルを短時間開くスクリプトを起動したいと思います。
user340098

回答:


0

スクリプトの最後の行に PIDを待つ との命令 PID あなたが興味を持っているバックグラウンドコマンドのそれは終わるでしょう。もちろん、あなたはそれを保存する必要があります PID あなたのスクリプトで。

#!/bin/bash 
# do first stuff...
select blah in foo bar oof rab
do
  cmd $blah &
  PID_TO_WAIT_FOR=$!  # here you store the PID of the last command
  break
done
# do other stuff 
wait  $PID_TO_WAIT_FOR

ノート:

  • waitはシェル組み込みコマンドです。 指定された各プロセスが完了して終了ステータスを返すのを待ちます。 これを参照できます 助けて

1

あなたが新しいでそれを実行する場合、それはあなたに合っていますか xterm セッションしてから、現在の端末を終了しますか?新しいものはまだ機能しているはずです。

xterm -e "bash -c \"./script.sh; exec bash\"" &

編集:

以下の方法では、端末からGUIからスクリプトを実行し、実行するコマンドを選択し、端末を終了して、コマンドを実行できるようにします。例として、私はいくつかのコマンドをcommandscript.shに入れました

openscript.sh:

#!/bin/bash
# Bash Menu Script Example

PS3='Please enter your choice: '
options=("Option 1" "Option 2" "Option 3" "Quit")
select opt in "${options[@]}"
do
    case $opt in
        "Option 1")
            echo "you chose choice 1"
            ;;
        "Option 2")
            echo "you chose choice 2 HEXDUMP"
            nohup bash commandscript.sh 
            ;;
        "Option 3")
            echo "you chose choice 3"
            ;;
        "Quit")
            break
            ;;
        *) echo invalid option;;
    esac
done

commandscript.sh:

#!/bin/bash
exec hexdump /dev/urandom | grep --line-buffered -i "ffff f" > random &

宣伝どおりですが、元の問題は解決しません。 :)スクリプトを実行するのに十分な長さだけxtermが存在するようにしたい(標準入力で)
user340098

編集に情報を追加しました。
Ruslan Gerasimov
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.