Bashでは時々入力します。コマンドリストをクリックしましたが、Enter後でリストの最後にあるいくつかのコマンドにエラーがあることに気づきました。Ctrl+を押すと、C現在実行中のコマンドが終了し、リストの残りの部分がキャンセルされることがわかります。リストの残りの部分をキャンセルする方法はありますか?いいえ現在実行中のコマンドを終了しますか?
たとえば、次のように入力するとします。
foo; bar
または
foo && bar
これはfoo
長期実行コマンドであるため、中断しないことが非常に重要であり、元に戻せず、bar
望ましくない操作(shutdown -h now
またはrm -rf /
)を実行します。シェルが実行中にfoo
完了し、foo
後で実行しないように指示する一般的な方法はありますか?bar
(はい、権限を変更してbar
実行不可能にすることもできますが、そのようなものを同時に使用したい場合はbar
あまり便利ではなく、ないか内蔵されてはいけません。動作しません。)rm
bar
bar
答え1
CtrlZプログラムをバックグラウンドプロセスに移動すると効果があることがわかりました。
foo && bar
foo; bar
あなたが望む方法で制御を提供しないというコメントを指摘した@Arkadiusz Drabczykに感謝します。
それから:
^Z
[1]+ Stopped foo
このコマンドは最初の操作のみを停止し、
fg %1
これにより、foo
ジョブが前面に移動し、ジョブが完了して終了します。
PS:これはファイルに書き込む2つのスクリプトで確認できます。最初は、それを入れる時間を与えるために数秒間眠ります。
CtrlZなぜ実行中のコマンドだけを処理し、残りは無視するのか理解できません。私はあなたを知りたいです。