2017-01-18 4 views
5

cmd1完了後、私はcmd2が必要です。私は時々cmd1を一時停止する必要があります。Bashで一連のコマンドを中断して再開するにはどうすればよいですか?

私は

$ cmd1 && cmd2 

に入力し、cmd1を停止するCtrl+Z (Stop)を押してください。今度はcmd1が一時停止しますが、再開するとcmd1の完了後にはcmd2が開始されません。

私は

$ cmd1 ; cmd2 

に入力し、私はcmd1を停止するCtrl+Z (Stop)を押してください。今すぐcmd1が一時停止しましたが、ただちにcmd2が開始され、cmd1が終了した後にのみcmd2を開始します。

私はいくつかの研究を行いましたが、誰かがzshでエレガントな方法を提案しましたが、bashでそれを行うエレガントな方法があるのだろうかと思います。サブシェルで

+0

関連:https://stackoverflow.com/questions/13600319/bash-run-one-command-after-another -e-if-i-suspend-the-first-one-ctrl-z – codeforester

答えて

9

実行して:

(cmd1 && cmd2) 

例:

$ (sleep 5 && echo 1)      # started the command chain 
^Z 
[1]+ Stopped   (sleep 5 && echo 1) # stopped before `sleep 5` finished 
$ fg           # resumed 
(sleep 5 && echo 1) 
1           # `sleep 5` finished and `echo 1` ran 
+1

ありがとう!私はそれが簡単で、自分自身を思い知らされていることを知らなかった!助けてくれてありがとう。 –

+2

@codeforester、私はそれがなぜサブシェルが必要なのか理解していませんでしたか? – sat

+0

私が停止して再開すると、コマンドバッファがフラッシュされると思います。サブシェルの場合、すでに完全なコマンドラインがあり、入力デバイスからそれを読み取っていません。それは私の推測です。 – codeforester

関連する問題