私がこれをしたいのかどうかは事前に知りませんでした。、あるジョブが完了するのを待ってから自動的に別のジョブを開始できますか?
たとえば、tmuxセッションに行きますsudo apt update && sudo apt upgrade
。アップデート/アップグレードプロセスが完了するまで待つ必要がありますが、遅くなっているので待ちたくありません。特に進行中に待たずに他のことを行うことができるので、さらにそうです。
私はこれをうまく機能させる^Z
ことができますがbg
、私の質問は、そのタスクが完了した後にタスクを挿入することによって&& sudo apt install tree
例を挙げる方法はありますか?です。
編集:この質問はリンクされた質問と回答とは異なると思います。なぜなら、job1 && job2
^Z
fg; echo "done"
完了echo "done"
後に実行されるからですjob1
。job2
明らかに削除されます。回避策はjob1
との間にセミコロンを使用することですが、job2
これは私にとって良い解決策ではありません。
ベストアンサー1
一般的に言えば、与えられたものより良い解決策はありません基本的なジョブ制御:ジョブの停止、スタックへのジョブの追加、および「fg」しかし、指摘したように、withを使用すると失敗し&&
(バックグラウンドに配置されたコマンドがゼロ以外のステータスコードで「終了」したため)、複合コマンドは常に望ましい効果を得ることはできません(現在実行中のコマンドが配置されます)。バックグラウンドですぐに次のコマンドを実行します。
この特定のユースケースには解決策があります。 Diomidis Spinellisが利用可能です。lockf.py
apt
現在のコマンドが完了するのを待つコマンドキューを作成します。
lockf /var/lib/apt/lock apt install tree
これは、予測可能な方法で外部で完了を観察できる任意のコマンドで一般化できます。
キューがソートされていないため、以下を実行すると問題が発生する可能性があります。
sudo apt update && sudo apt upgrade
インストールの実行中にキューに入れると、ロックが得られないため、最終的に実行され失敗する可能性がありapt update
ます。apt install
apt update
apt upgrade