
コンソールの入力をブロックする 2 つのコマンドが実行されたため、CTRL+C で終了する必要があります。割り込み制御が失われるため、バックグラウンドで実行するのは好ましくありません。ただし、最初のコマンドが次のコマンドの開始前に終了を待機するため、1 行で連続して実行することはできません。
Unix ではこれに対するトリックがあるはずです。私が試しているのは次のようなものです:
$ fg-wrapper infinite-cmd1 & infinite-cmd2
Executing cmd1 in bg
Executing cmd2 in bg
(Waiting for CTRL+C to end both)
私はスクリプトではなくワンライナーを探しています: fg-wrapper は、私が夢見ている組み込みの POSIX コマンドであり、例として提供されます (スクリプトを作成する必要がないようにしたい)
答え1
これを試して:
#!/usr/bin/env bash
echo "Executing $1 in bg"
eval $1 &
echo "Executing $2 in bg"
eval $2 &
wait
説明:
$1
$2
コマンドラインの最初と 2 番目の引数を参照します。 これらeval
のコマンドは&
バックグラウンドで実行されます。最後に、wait
これらのコマンドが終了するのを待ちます。または、CTRL-C で終了することもできます。
このスクリプトを試してみてください
./script "ping google.com > /dev/null" "ping 127.0.0.1 > /dev/null"