如何在 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
这使我能够运行非常通用的东西,虽然它看起来很丑,但它非常实用。
把它留在这里,以防其他人正在寻找同样的东西。
答案3
要运行一个简短的命令而不最终退出:
tmux \
new-session 'ls ; bash' \; \
split-window 'ls ; bash'
或者
tmux \
new-session 'ls ; bash' \; \
new-window 'ls ; bash'