タスクの実行中に(ファイルを使用せずに)ターミナルでシリアルタスクを提供する方法はありますか?


14

次のように連続して実行できる2つのタスクt1t2あるとします。

t1 ; t2
# OR
t1 && t2

今、私は実行するのを忘れたとt2し、t1すでに実行されています。終了t2後に実行されるようにパイプラインに追加できt1ますか?

回答:


19

はい、できます:

  1. + を押して、現在実行中のジョブを一時停止文字で一時停止します。CtrlZ
  2. 入力するfg%、リストにしたいものを追加し、それを実行し、例えば:
    fg ; systemctl suspend # or
    % ; systemctl suspend
    以来fg、それは再開ジョブの戻り戻り値は、リスト演算子は好き&&||期待通りの仕事:
    fg && echo "Finished successfully!" # or
    % && echo "Finished successfully!"

man bash/ JOB CONTROLは、サスペンドキャラクターについて次のように述べています。

プロセスの実行中に中断 文字(通常 ^ZControl- Z)を入力する と、そのプロセスが停止し、制御がに戻りますbash。(…)ユーザーはbg、バックグラウンドでfg 続行するコマンド、フォアグラウンドで続行するkillコマンド、または強制終了するコマンドを 使用して、このジョブの状態を操作できます。A ^Zはすぐに有効になり、保留中の出力と先行入力が破棄されるという追加の副作用があります。

fgman bash/ SHELL BUILTIN COMMANDSで説明されています

fg [ jobspec ] フォアグラウンドでjobspec
再開し、それを現在のジョブにします。jobspecが存在しない場合、シェルの現在のジョブの概念が使用されます。戻り値は、フォアグラウンドに置かれたコマンドの戻り値、またはジョブ制御が無効なときに実行される場合は失敗、ジョブ制御が有効な状態で実行される場合、jobspec が有効なジョブを指定しない場合、 またはjobspecはジョブ制御なしで開始されたジョブを指定する場合

man bashジョブ制御に関する詳細な情報(を除く):


+1ですがt3t1; t2; t3またはを忘れると動作しませんt1 && t2 && t3
-JoL

@JoLそれは本当です- ^Z^Zそして%-;%+;t3場合によっては十分ですが、問題の本当の解決策とはほど遠いです。
デザート

2

私はここでこの方法を見ました:https : //superuser.com/questions/334272/how-to-run-a-command-after-an-already-running-existing-one-finishes

最初にCtrl+ zを実行して実行中のコマンドを停止(サスペンド)した後、次のように欠落しているコマンドfg && ./missed_cmd.shを実行しfgます。

fg(フォアグラウンドコマンド)は、オンライン中断したジョブをもたらすでしょうし、&&最初のコマンドが成功した場合逃したコマンドは、実行されていることを確認します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.