我想编写一个 shell 脚本,它将附加到一个命名的 tmux 会话,在该会话中选择一个窗口(或窗格)并在该选定的窗口(或窗格)中运行一个命令。
如何从 bash 脚本执行此操作?
我知道
tmux new-window -n:mywindow 'exec something'
Run Code Online (Sandbox Code Playgroud)
允许我向新创建的窗口发送命令,但我需要类似的东西
tmux select-window -t:0 'my command'
Run Code Online (Sandbox Code Playgroud)
我想我可以使用,send-keys
但似乎应该有一些需要运行的命令或命令列表。
Chr*_*sen 101
每个tmux窗格都是单个 pty(伪 tty)的接口。非拆分窗口只有一个窗格;拆分窗口有多个窗格。
一旦使用初始命令启动,tmux不提供向窗格添加额外进程的方法。由初始命令的进程(通常是外壳程序)为该终端提供作业控制1。
如果您想破坏窗格中当前正在运行的任何内容,您可以使用respawn-pane -k
终止现有命令并将其替换为新命令(例如,respawn-pane -t sessionname:0.4 -k 'some -new command'
)。
但是,如果您想维护窗格中当前正在运行的任何内容,那么可能没有更好的选择,只需使用send-keys
.
您可以像这样编写脚本(最后附上,否则脚本将在继续之前等待您分离):
session=whatever
window=${session}:0
pane=${window}.4
tmux send-keys -t "$pane" C-z 'some -new command' Enter
tmux select-pane -t "$pane"
tmux select-window -t "$window"
tmux attach-session -t "$session"
Run Code Online (Sandbox Code Playgroud)
请注意,在send-keys
命令中,您实际上应该键入字母
E n t e r, 来告诉tmux
将换行键发送到窗口。(当然,每个命令都以Enter键结尾。)
1作业控制是使用 tty 作为其控制终端的单个会话的多个进程组之间的仲裁。即,Ctrl+Z挂起键,和jobs
,fg
和bg
shell命令。
Ale*_*iev 16
您可以使用C-m
代替Enter
. 这是同一件事。此外,tmux
使用-t right
或可以轻松发送到右/左窗格-t left
。如果您想在另一个窗口中寻址窗格,只需在它前面加上窗口编号和句点,例如-t 0.right
.
现在您可以编写一个简单的 Bash 函数来获取键序列作为参数并将其轻松发送到目标窗格。
归档时间: |
|
查看次数: |
97451 次 |
最近记录: |