$ command1 && command2 && command3
Running command1 ...
Running command2 ...^Z
[1]+ Stopped
$ fg && command4 && wrong_command5 && command6
Running command3
Running command4
現在の実行が終了した後にスケジュールをキャンセルするにはどうすればよいですかwrong_command5
?right_command5
command4
ベストアンサー1
command4
現在実行している場合は、非常に簡単にこれを行うことができます。
^Z
$ fg && right_command5 && command6
これは本質的にcommand4
最初からあなたがやってきたことです。wrong_command5
残りは交換され、実行されません。
私はこの振る舞いが予期しないと仮定しているので、ここで何が起こっているのかを知るために読んでください。
しかし:注意してください元のコマンドの順序は、思ったように実行されませんでした。。これを行うとき:
$ command1 && command2 && command3
Running command1 ...
Running command2 ...^Z
[1]+ Stopped
$ fg && command4
これでcommand2
再開されます。しかし、チェーンの残りの部分はそうではありません。。停止は(-20)例外で終了することをcommand2
意味します。失敗したシャットダウンのため、チェーンが短絡して機能しません。終了後すぐに再開されます。Ctrl-ZSIGTSTP
command2
&&
command3
command4
command2
&&
以下を交換すると、この動作が実際に行われていることがわかります||
。
$ command2 || echo Running command3, exit was $?
^Z
[1]+ Stopped command2
Running command3, exit was 148
$
目標の動作を達成するには、回復時に後続のコマンドチェーン全体を一覧表示する必要があります。あるいは、コマンドチェーン全体を停止して再開できるようにするには、サブシェルでコマンドを実行する必要があります。
$ (command1 && command2 && command3)
^Z
$ fg
ただし、この場合、注文を調整して交換する方法はありません。