我努力了
tmux -c "shell command" split-window
但它似乎不起作用。
使用tmux split-window
,可以分割一个新窗口。
更新:
使用tmux split-window 'exec ping g.cn'
可以运行 ping 命令,但停止时新窗口将关闭。
答案1
使用:
tmux split-window "shell command"
该split-window
命令具有以下语法:
split-window [-dhvP] [-c start-directory] [-l size | -p percentage] [-t target-pane] [shell-command] [-F format]
(从man tmux
,“窗口和窗格”部分)。注意顺序很重要——命令必须来后出现的任何前面的选项,并且它必须是单个参数,因此如果它有空格,则需要引用它。
对于像这样快速终止的命令ping -c
,您可以remain-on-exit
先设置该选项:
tmux set-option remain-on-exit on
tmux split-window 'ping -c 3 127.0.0.1'
该窗格在完成后将保持打开状态ping
,但会被标记为“死亡”,直到您手动将其关闭。
如果您不想更改整体选项,还有另一种方法。该命令使用 运行sh -c
,您可以利用它使窗口在最后保持活动状态:
tmux split-window 'ping -c 3 127.0.0.1 ; read'
这里使用的是shellread
命令在主命令完成后等待用户输入换行符。在这种情况下,命令输出将一直保留,直到您按Enter窗格,然后它会自动关闭。
答案2
bash --rcfile
此技术打开一个新的 shell,运行命令,并在命令完成后将您留在那里:
tmux-split-cmd() ( tmux split-window -dh -t $TMUX_PANE "bash --rcfile <(echo '. ~/.bashrc;$*')" )
tmux-split-cmd 'cd; pwd; ping google.com'
或者,如果命令没有特殊的终端字符,例如;
:
tmux-split-cmd ping google.com
这使用:
--rcfile
:如何调用 bash,在新 shell 中运行命令,然后将控制权交还给用户? |堆栈溢出TMUX_PANE
:如何分割运行“tmux split-window”命令的窗口而不是当前窗口?
另一个有趣的变体是:
tmux-split-cmd-uniq() (
if [ "$(tmux list-panes | wc -l | cut -d' ' -f1)" -ne 1 ]; then
tmux kill-pane -t 1
fi
tms "$@"
)
如果前一个分割已经存在,它会杀死它,并有助于始终只保留一个额外的分割。
答案3
我会建议
tmux split-window
tmux send "ping -c 3 127.0.0.1" ENTER
好处是新窗格将始终处于活动状态并且永远不会关闭,而之前的答案tmux split-window 'ping -c 3 127.0.0.1 ; read'
将在用户按 后关闭会话Enter。