Answers:
每个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"
请注意,在send-keys
命令上,您实际上应该键入字母
E n t e r,以告知tmux
将换行键发送到窗口。(自然地,每个命令都以Enter键结尾。)
1作业控制是使用tty作为控制终端的单个会话的多个进程组之间的仲裁。即,Ctrl+ Z挂起键,和jobs
,fg
和bg
shell命令。
您可以使用C-m
代替Enter
。这是同一件事。另外,tmux
通过使用-t right
或,可以很容易地将其发送到左右窗格-t left
。如果要在另一个窗口中处理窗格,只需在其前面加上窗口号和句点即可,例如-t 0.right
。
现在,您可以编写一个简单的Bash函数来获取键序列作为参数,并将其轻松发送到目标窗格。
#{session_name}:#{window_index}.#{pane_index}
在状态栏中输入了内容,以便快速查看将命令发送到哪个窗格。