
複数のBashスクリプトを同時に実行する必要があります(正確には、変数が異なる同じスクリプト)。タブの数を制御するためにターミナルタブにグループ化したいと思います。
スクリプトは定期的に出力され、問題があるかどうかを確認します。
バックグラウンドで送ると
./script.sh 1 &
./script.sh 2 &
./script.sh 3 &
./script.sh 4
Ctrl私はそれらを制御できなくなります。たとえば、+でスクリプトを終了しますC。上記のコードを使用してpid
各プロセスを終了する必要があります。
./all_scripts.sh
上記のコードは、端末に入力したコマンドではなく、私の基本スクリプト(例:)の内容です。
単一の出力スクリプトとして処理しながら、同じ端末でスクリプトを実行する方法はありますか?
答え1
あなたはそれらに対する制御力を失うことはありません。 (最後の項目を除く)を背景に送信します。
指定されたコマンドチェーンを実行すると、呼び出しはフォアグラウンド./script.sh 4
で実行され、他のスクリプトはバックグラウンドで実行されます。入力がフロントエンドスクリプトに送信されます。前景スクリプトを一時停止するには、を押しますCtrlZ。実行を続けるために保留中のスクリプトをバックグラウンドで送信するには、このbg
コマンドを使用します。
現在持っているスクリプト(またはより正確には作業)とその状態を確認するには、を使用しますjobs
。
特定の求人情報を目立たせるには、fg
その番号(上記のように)をプレフィックスとjobs
一緒に使用してください。特定のジョブを終了するには、そのジョブを前面にインポートして賢明に終了できます。%
fg %2
fg
kill
kill -TERM %2
答え2
さまざまな方法と手順をテストした後、実用的な解決策は次のとおりです。GNUパラレル。この回答は他の人に役立つ可能性があるため投稿します。
GNU Parallel
この作業のために作成されていませんが、その目的を完全に実行します。
次のようにスクリプトを実行すると、
parallel -u ::: './script.sh 1' './script.sh 2' #(and so forth)
すべてのスクリプトは並列に実行されます。
-u
()フラグは、スクリプトの実行時に--ungroup
スクリプト出力を送信します。stdout
Ctrl+ジョブとそれ以降に実行されているすべてのスクリプトをC終了します。parallel
答え3
tmux
この目的に使用できます。
これは、1つのタブを複数のウィンドウに分割することを意味する端末マルチプレクサです。
- コマンドを使用して起動します
tmux
。 - 1つのウィンドウを2つのウィンドウに分割するには、
Contr
+ Bの後に"
またはを使用します。%
- フォアグラウンドでプロセスを開始します。
Contr
プロセスを切り替えるには、uding +キーB
と矢印キーを使用してください。
これで、端末の単一のタブで通常複数のプロセスを制御できます。
特定のウィンドウにピントを合わせたりピントを合わせたくない場合は、Contr
+B
の後にを使用してくださいZ
。
スクロールが必要な場合はContr
+をB
押し、Q
矢印キーを使ってスクロール(またはマウスモードを有効にする)します。
チートシートを見つけることができますここ。
プロセスを自動化することもできます。
答え4
タスクバックグラウンドハンドラはこれらのニーズを満たすことができます。 https://vicerveza.homeunix.net/~viric/soft/ts/article_linux_com.html
Debian と Ubuntu では、別名 "tsp" を使ってツールを見つけることができます。