似たようなものを探していますcommand1 ; command2
。つまり、command2
後で実行する方法がありますが、すでに実行しているときに実行するようにcommand1
スケジュールしたいと思います。command2
command1
command2
command1
標準入力を使用せず、出力にcommand1
入力が実用的ではないほど多くのテキストを生成しないと仮定すると(入力した文字が出力と混在するcommand1
)、単に入力してEnterを押すとこの問題が解決されます。
答え1
一般的に私がすることは次のとおりです。Ctrl+Z fg && command2
- Ctrl+Z一時停止し、シェルに詳細を入力できます。
- (オプション
bg
)command2を入力しながら、バックグラウンドでcommand1を再起動します。 fg && command2
command1 が成功すると、command1 がフォアグラウンドで復元され、command2 がその後キューに追加されます。もちろん、必要に応じてまたは;
に置き換えることができます||
。&&
答え2
コマンドを開始する
command1
Ctrl実行を一時停止するには+を押します。Z
一時停止コマンドを実行して、対応するジョブ番号を見つけます。 (通常、一時停止コマンドをコンソールに表示すると、すでにコンソールに印刷されています。)
jobs
command1
バックグラウンドで続けましょうbg
計画の実行が
command2
完了するのを待っています。command1
wait -n <command1 job number> ; command2
文書ジョブ制御内蔵
答え3
いくつかのオプションがあります。
アンパサンド付き、「バックグラウンドにプッシュされる」、第2のプログラムは、第1のプログラムの開始後に開始されるが、互いに並列に実行することができる。
command1 & command2
アンパサンドを2つ含む、「論理AND」、第2のプログラムは、第1のプログラムが正常に完了した後にのみ開始される。
command1 && command2
セミコロンでコマンドラインからコマンドを切り離して最初のプログラムが完了すると、失敗したり中断されても、2番目のプログラムが起動します。
command1 ; command2
あなたはそれを使用することができます
wait <PID>
同じシェル(同じ端末ウィンドウ)ですでに実行されている場合は、最初のコマンドが完了するのを待ちます。それ以外の場合、最初のコマンドがすでに別のシェル(別のウィンドウ)で実行されている場合は、小さなコマンドを使用できます。whileループはpsを使用してPIDがまだ見つかっているかどうかを確認します。
ps
。見つからない場合は、2 番目のコマンドが実行されます。bash
このデモ例は、PIDを介して実行されていることを確認し、top
コマンドを実行するために使用されます。echo "*** $USER, I am ready now ***"
実行されなくなった場合
top
。pid=$(ps -A|grep top|cut -d ' ' -f 1); \ while [ "$pid" != "" ]; do ps -A|grep "$pid" > /dev/null; \ if [ $? -eq 0 ]; then sleep 5;else pid=""; fi; done; \ echo "*** $USER, I am ready now ***"
答え4
2 つの端末を使用できるオプションがある場合は、次のことができます。
- 端末でcommand1を実行したとします(terminal1と呼びます)。
- 新しい端末を起動します(terminal2と呼びます)。
- command1のプロセスIDを見つけます(command1_pidといいます)。ターミナル2でコマンドを実行します。
ps -ef | grep <command1>
誤ってサブストリングを持つ他のプロセスを見つけないように、grepコマンドでフィルター文字列を正しく構成できます。 - コマンドの実行
wait <command1_pid> ; command2
デフォルトでは、提供されたwait
PIDが終了するのを待ってから返されるbash組み込み機能です。 command1が完了するのを待つタスクをbashwait
コマンドに委任するだけです。