コマンドを同時に実行するには、&
コマンド区切り記号を使用できます。
~$ command1 & command2 & command3
これが開始さcommand1
れ、バックグラウンドで実行されます。と同じcommand2
です。その後、command3
正常に起動します。
すべてのコマンドの出力は文字化けしますが、それが問題にならない場合は、解決策になります。
後で出力を個別に見たい場合は、各コマンドの出力をにパイプして、出力tee
をミラーリングするファイルを指定できます。
~$ command1 | tee 1.log & command2 | tee 2.log & command3 | tee 3.log
出力はおそらく非常に乱雑になります。これに対抗するために、を使用してすべてのコマンドの出力にプレフィックスを付けることができますsed
。
~$ echo 'Output of command 1' | sed -e 's/^/[Command1] /'
[Command1] Output of command 1
したがって、すべてをまとめると、次のようになります。
~$ command1 | tee 1.log | sed -e 's/^/[Command1] /' & command2 | tee 2.log | sed -e 's/^/[Command2] /' & command3 | tee 3.log | sed -e 's/^/[Command3] /'
[Command1] Starting command1
[Command2] Starting command2
[Command1] Finished
[Command3] Starting command3
これは、おそらくあなたが見ているものの非常に理想的なバージョンです。しかし、それは私が今考えることができる最高です。
すべてを一度に停止する場合は、のビルドを使用できますtrap
。
~$ trap 'kill %1; kill %2' SIGINT
~$ command1 & command2 & command3
これが実行されますcommand1
とcommand2
、バックグラウンドでとcommand3
あなたがそれを殺すことができますフォアグラウンドにCtrl+ C。
あなたが最後のプロセスを強制終了する場合Ctrl+ 私たちはINTerupt信号の受信とその実行を接続しているため、コマンドが実行され、事が押して送信される+を。Ckill %1; kill %2
CtrlC
それぞれ、1番目と2番目のバックグラウンドプロセス(your command1
とcommand2
)を強制終了します。を使用してコマンドを終了したら、忘れずにトラップを削除してくださいtrap - SIGINT
。
コマンドの完全なモンスター:
~$ trap 'kill %1; kill %2' SIGINT
~$ command1 | tee 1.log | sed -e 's/^/[Command1] /' & command2 | tee 2.log | sed -e 's/^/[Command2] /' & command3 | tee 3.log | sed -e 's/^/[Command3] /'
もちろん、画面を見ることができます。コンソールを必要な数の個別のコンソールに分割できます。したがって、すべてのコマンドを個別に監視できますが、同時に監視できます。