次のようなサブシェルでシーケンスコマンドを実行します。
(git pull;git rebase develop)&>/dev/null
これにより、サブシェルとそれによって作成されたすべての子プロセスがバックグラウンドに置かれ、ユーザーに制御が返されると思います。
しかし実際には、ターミナルはしばらくの間ハングアップし、サブシェルでコマンドが終了するのを待っているようです。
だから、なぜこれが起こったのか、そしてこの種の仕事をする正しい方法は何であるかを誰かが説明できますか?.
bash
シェルを実行している場合、&>/dev/null
は標準出力とエラーストリームを/dev/null
にリダイレクトします(これは>/dev/null 2>&1
と同じです)が、 t ( ... )
サブシェルを非同期プロセスとして実行します。そのためには、最後に&
を追加する必要があります。
(git pull; git rebase develop) &>/dev/null &
ksh93
にはこの機能がなく、POSIXにはありません。
ケースにsleep
を追加し、コマンドの最後に&
を追加して、バックグラウンドに置くことができます。
(git pull; sleep 3; git rebase develop) &>/dev/null &
または、次を使用できます。
for cmd in $commands
do
"$cmd" &
done
wait
コマンドの最後にある&
はそれをバックグラウンドで実行し、wait
はバックグラウンドタスクが完了するまで待機します。