ターミナルウィンドウで複数のBashスクリプトを同時に実行するには?

ターミナルウィンドウで複数のBashスクリプトを同時に実行するには?

複数の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 %2fgkillkill -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" を使ってツールを見つけることができます。

関連情報