2

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

这是我的.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' 一定会导致错误,因为当它存在时,不会创建初始窗格。如果我将其更改为“顶部”,它可以正常工作并执行命令。

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

4

1 回答 1

5

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

setw -t servers remain-on-exit on

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,但随后模拟ls在第一个 shell 提示符下键入命令,为您提供该目录中的文件列表。完成ls后,您将返回 shell,并且窗格将继续存在,直到 shell 本身完成。

于 2013-10-31T16:29:27.073 回答