「作業が完了するのを待ってから別の作業を始めてください」というコマンドですか? [コピー]

「作業が完了するのを待ってから別の作業を始めてください」というコマンドですか? [コピー]

私がこれをしたいのかどうかは事前に知りませんでした。、あるジョブが完了するのを待ってから自動的に別のジョブを開始できますか?

たとえば、tmuxセッションに行きますsudo apt update && sudo apt upgrade。アップデート/アップグレードプロセスが完了するまで待つ必要がありますが、遅くなっているので待ちたくありません。特に進行中に待たずに他のことを行うことができるので、さらにそうです。

私はこれをうまく機能させる^Zことができますがbg、私の質問は、そのタスクが完了した後にタスクを挿入することによって&& sudo apt install tree例を挙げる方法はありますか?です。

編集:この質問はリンクされた質問と回答とは異なると思います。なぜなら、job1 && job2 ^Z fg; echo "done"完了echo "done"後に実行されるからですjob1job2明らかに削除されます。回避策はjob1との間にセミコロンを使用することですが、job2これは私にとって良い解決策ではありません。

ベストアンサー1

一般的に言えば、与えられたものより良い解決策はありません基本的なジョブ制御:ジョブの停止、スタックへのジョブの追加、および「fg」しかし、指摘したように、withを使用すると失敗し&&(バックグラウンドに配置されたコマンドがゼロ以外のステータスコードで「終了」したため)、複合コマンドは常に望ましい効果を得ることはできません(現在実行中のコマンドが配置されます)。バックグラウンドですぐに次のコマンドを実行します。

この特定のユースケースには解決策があります。 Diomidis Spinellisが利用可能です。lockf.pyapt現在のコマンドが完了するのを待つコマンドキューを作成します。

lockf /var/lib/apt/lock apt install tree

これは、予測可能な方法で外部で完了を観察できる任意のコマンドで一般化できます。

キューがソートされていないため、以下を実行すると問題が発生する可能性があります。

sudo apt update && sudo apt upgrade

インストールの実行中にキューに入れると、ロックが得られないため、最終的に実行され失敗する可能性がありapt updateます。apt installapt updateapt upgrade

おすすめ記事