ChatGPT (3.5/4), Bing Chat, Bard に同じ質問をしてみました。
オレ
tmux で二つのコマンド ./a.sh ./b.sh を同時に起動するコマンドラインを教えてください。
ChatGPT: GPT-3.5
ChatGPTChatGPT1 / 1tmuxは、ターミナルセッションを分割し、複数のコマンドやプログラムを同時に実行するためのツールです。次のコマンドを使用して、tmuxセッションを作成し、二つのコマンド./a.shと./b.shを同時に起動することができます。
tmux new-session -d -s mysession './a.sh' \; split-window -h './b.sh' \; attach-session -t mysession
このコマンドは次の手順で実行されます:
tmux new-session -d -s mysession './a.sh':新しいtmuxセッションを作成し、名前をmysessionとし、./a.shを実行します。-dオプションはセッションをバックグラウンドで実行することを意味します。
\;:コマンドセパレータを指定します。
split-window -h './b.sh':現在のウィンドウを水平に分割し、新しいパネルで./b.shを実行します。-hオプションは水平分割を行うことを意味します。
\;:コマンドセパレータを指定します。
attach-session -t mysession:セッションmysessionにアタッチします。これにより、セッション内のコマンドが実行されます。
これにより、二つのコマンドが同じtmuxセッションで同時に実行されます。./a.shは最初のパネルで実行され、./b.shは新しい水平パネルで実行されます。
注意:もしtmuxがインストールされていない場合は、事前にインストールする必要があります。また、./a.shと./b.shは実行可能なスクリプトまたはコマンドである必要があります。
ChatGPT: GPT-4
ChatGPTChatGPT1 / 1tmuxを使って二つのスクリプト(ここでは ./a.sh と ./b.sh)を同時に実行するには、以下の手順に従ってください。
- 新しいtmuxセッションを作成します:
tmux new-session -d -s my_session
ここで、my_sessionはセッション名です。任意の名前に変更できます。
- 作成したセッション内で、最初のスクリプト(./a.sh)を実行します:
tmux send-keys -t my_session './a.sh' Enter
ここで、my_sessionは先ほど作成したセッション名になります。
- 次に、同じセッション内で新しいウィンドウを作成します:
tmux new-window -t my_session
- 新しいウィンドウ内で、次のスクリプト(./b.sh)を実行します:
tmux send-keys -t my_session './b.sh' Enter
以上で、./a.shと./b.shが同時に実行されます。なお、これらのコマンドを一行で実行することも可能です:
tmux new-session -d -s my_session './a.sh' \; new-window -t my_session './b.sh'
このコマンドは新しいtmuxセッションを作成し、その中で./a.shを実行した後に新しいウィンドウを作成し、その中で./b.shを実行します。
Bing (バランス)
tmuxで二つのコマンドを同時に起動するには、以下のようにコマンドを入力してください。
tmux new-session -d -s session-name './a.sh' \; split-window -h './b.sh'
このコマンドは、tmuxの新しいセッションを作成し、そのセッション内で2つのウィンドウを作成します。1つ目のウィンドウで ./a.sh
を実行し、2つ目のウィンドウで ./b.sh
を実行します。1 2
上記のコマンドでは、-d
オプションは、新しいセッションをバックグラウンドで開始することを指定します。-s session-name
オプションは、新しいセッションに名前を付けます。split-window -h
は、現在のペインを水平方向に分割します。1
ご参考になれば幸いです。
ソース: Bing との会話 2023/5/16
- (1) tmuxで複数のペインに対して同時にコマンドを実行する - Qiita. https://qiita.com/mogulla3/items/fe2c13c23ec1bf266317
- (2) コマンド入力一撃で端末を大量に分割してタスクを瞬殺するtmux .... https://qiita.com/greymd/items/8744d1c4b0b2b3004147
- (3) tmux起動時に分割する - Qiita. https://qiita.com/ken11_/items/1304c2eecc2657ac6265
Bard(回答1)
tmux で 2 つのコマンドを同時に実行するには、次のコマンドを使用できます。
tmux new -s my-session "bash -c './a.sh; ./b.sh'"
これにより、新しいセッションが作成され、そのセッション内で 2 つのコマンドが同時に実行されます。
Bard(回答2)
tmux で 2 つのコマンドを同時に実行するには、tmux new -s "mysession" "command1; command2"
コマンドを使用できます。ここで、mysession
はセッションの名前、command1
は最初のコマンド、command2
は 2 番目のコマンドです。たとえば、ls
コマンドと pwd
コマンドを同時に実行するには、次のコマンドを使用します。
tmux new -s "mysession" "ls; pwd"
これにより、新しいセッションが作成され、2 つのコマンドが同時に実行されます。セッションを終了するには、Ctrl
+b
d
を押します。
Bard(回答3)
tmux で 2 つのコマンドを同時に実行する方法はいくつかあります。1 つの方法は、& 演算子を使用することです。たとえば、次のコマンドを実行すると、コマンド a.sh とコマンド b.sh の両方が同時に実行されます。
tmux new -s session1 "bash -c './a.sh & ./b.sh'"
別の方法は、&&
演算子を使用することです。たとえば、次のコマンドを実行すると、コマンド a.sh が正常に完了した後にのみ、コマンド b.sh が実行されます。
tmux new -s session2 "bash -c './a.sh && ./b.sh'"
最後に、||
演算子を使用して、コマンド a.sh が失敗した場合にのみコマンド b.sh を実行することもできます。たとえば、次のコマンドを実行すると、コマンド a.sh が失敗した場合にのみ、コマンド b.sh が実行されます。
tmux new -s session3 "bash -c './a.sh || ./b.sh'"
結論
GPT-4 と Bing は正しい答えを返してくれました。GPT-3.5 はコマンド自体は正しかったのですが、
attach-session -t mysession:セッションmysessionにアタッチします。これにより、セッション内のコマンドが実行されます。
というのは説明としては正しくなかったので、残念です。
Bardは(回答1)(回答2)は同時にという要件を満たしていないし、(回答3)でも tmux でとわざわざ指定しているのでちょっと外れた回答になっています。
特に Bing は参考 URL も示してくれて、今回の質問に関しては一番良かったと思います。
また、折にふれ同じ質問をAI Chat に投げて比較してみたいと思います。