複数のコマンドを起動するtmuxスクリプト

複数のコマンドを起動するtmuxスクリプト

bash スクリプトで次のように記述するにはどうすればよいですか?

tmux # Start tmux session.
compass watch /path/to/project1/compass/ # Run the first process.
Ctrl + B, " # Split the pane.
compass watch /path/to/project2/compass/ # Run the second process.
Ctrl + B, D # Exit the session.

答え1

tmux \
    new-session  'compass watch /path/to/project1/compass/' \; \
    split-window 'compass watch /path/to/project2/compass/' \; \
    detach-client

コマンドnew-session(新しいtmuxセッションを作成する) とsplit-windowコマンド (現在のウィンドウを 2 つのペインに分割する) は、tmuxオプションのシェル コマンドを実行して、 を実行します。 はdetach-client最後に明白な処理を実行します。

水平分割(2 つのペインを並べて表示)が必要な場合は、split-window -h上記のコマンドで を使用します。

tmuxに複数のコマンドを送信する場合は、tmuxで区切る必要があります;。は、シェルがコマンドの終了として解釈しないように、;引用符/エスケープ ( ';'";"または) で囲んでシェルから保護する必要があります。\;tmux

読みやすくするために、全体を別々の行に分割しました。これをスクリプトで行う場合 (推奨)、\各行の末尾の後に何もないことを確認してください。

tmux a、、tmux attachまたはtmux attach-session(これらはすべて同等)を使用してセッションに再接続します。

tmux両方のコマンドの実行が完了するとセッションは終了します。

答え2

これは私にはうまくいきませんでした (「ls -la」のようなことをしようとしていました)。うまくいったのは次のことです:

tmux new-session -d bash
tmux split-window -h bash
#sends keys to first and second terminals
tmux send -t 0:0.0 "<my-first-command>" C-m
tmux send -t 0:0.1 "<my-second-command>" C-m
tmux -2 attach-session -d

これにより、かなり汎用的なものを実行できるようになりました。見た目は醜いですが、かなり機能的です。

他の人も同じものを探しているかもしれないので、ここに残しておきます。

ソース:https://gist.github.com/kizzx2/4739236

答え3

最後に終了せずに短いコマンドを実行するには:

tmux \
    new-session  'ls ; bash' \; \
    split-window 'ls ; bash' 

または

tmux \
    new-session  'ls ; bash' \; \
    new-window   'ls ; bash' 

関連情報