何らかの方法で実行中のコマンドを変更したり、実行中のコマンドが完了したときに通知を受け取ることを望みます。後ろにすでに始まっています。
通常、コマンドの実行に時間がかかることがわかったら、事前にいくつかの通知を設定します。
./takes_long_time && touch done
または
./takes_long_time; touch done
私の質問は、./takes_long_time
なしで実行された場合、touch
再起動せずに戻って追加する方法はありますか./takes_long_time
?
答え1
もう少し検索してみました解決策:
$ ./takes_long_time
<ctrl-z>
[1]+ Stopped ./takes_long_time
$ fg && touch done
どのように使用するかによって、いくつかの注意があります(fg; touch done
望ましくない結果が生じる可能性があります。リンクされた投稿を参照してください)。
fg | grep something
さらに、パイプ()の追加などの操作は実行できませんが、これは理解できる制限です。
答え2
おそらく ./takes_long_time
バックグラウンドに置く必要があります。
変える
./takes_long_time && touch done
する
./takes_long_time &
./takes_long_time
これはバックグラウンドで実行されます。その後は実行できます./takes_long_time
。したがって、バックグラウンドで2つのプロセスが実行されます。
コマンドが完了したかどうかを知る非伝統的な方法は次のとおりです。
if command_line; then
echo "It is done"
fi
はい
if sleep 5; then
echo "Finish sleeping for 5 seconds"
fi