打开新的tmux会话后如何执行命令

时间:2013-10-31 15:46:46

标签: bash tmux

我在创建新会话以执行命令时遇到了一些麻烦。

以下是 .tmux.conf 的一部分:

set-window-option -g automatic-rename off
set-option -g allow-rename off
new -A -s 'main' -n 'servers' 'ls' # troubled line
splitw -h -p 35 htop
splitw -v
splitw -v -t 1
splitw -v -t 1
neww -n 'irc' weechat-curses
selectw -t 0

这就是我正在处理的问题:

new -A -s 'main' -n 'servers' 'ls'

以下是我打开tmux的方法:

alias tux='TERM=screen-256color-bce tmux -f ~/.tmux.conf attach-session -t main'

'ls'必须导致错误,因为当它出现时,初始窗格不会被创建。如果我将其更改为“顶部”,它可以正常工作并执行命令。

那么为什么顶级工作而不是ls(或我试过的任何其他命令)?

1 个答案:

答案 0 :(得分:5)

top一直运行直到你退出。 ls在打印当前目录的内容后退出。这会导致ls运行的窗口关闭。

setw -t servers remain-on-exit on

应该在命令退出后保持名为'servers'的窗口不被关闭,但是在new-session命令运行之前和new-session之后窗口不存在这一事实很复杂返回,运行setw命令可能为时已晚(尽管你可以尝试)。

而是创建一个新会话,其中默认值是在命令存在后保留窗口:

new -A -s 'main' -n 'servers' 'ls' # troubled line
set -t main set-remain-on-exit on
neww -n 'servers' ls

根据您的上一条评论,忽略上述内容,并将您的new命令替换为

new -A -s 'main' -n 'servers'
send-keys -t servers.0 ls Enter

这将创建一个常规窗口,其命令是常规shell,但随后模拟在第一个shell提示符下键入ls命令,以便为您提供该目录中的文件列表。在ls完成后,您将回到shell中,并且窗格将继续存在,直到shell本身完成。