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命令(将当前窗口分成两个窗格)tmux采用可选的 shell 命令来运行。detach-client最后的作用显而易见。

如果您想要水平分割(两个并排的窗格),请split-window -h在上面的命令中使用。

发送多个tmux命令时,tmux需要用 分隔;。需要通过引用/转义它( 、或);来保护它免受 shell 的影响,以阻止 shell 将其解释为命令的结尾。';'";"\;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' 

相关内容