我在创建新的会话以执行命令时遇到了一些麻烦.
这是我的.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
Run Code Online (Sandbox Code Playgroud)
这是我正在努力的路线:
new -A -s 'main' -n 'servers' 'ls'
Run Code Online (Sandbox Code Playgroud)
这是我打开tmux的方式:
alias tux='TERM=screen-256color-bce tmux -f ~/.tmux.conf attach-session -t main'
Run Code Online (Sandbox Code Playgroud)
'ls'必须导致错误,因为当它存在时,初始窗格不会被创建.如果我将其更改为"顶部",它可以正常工作并执行命令.
那么为什么顶级工作而不是ls(或我尝试的任何其他命令)?
top
一直运行直到你退出 ls
在打印当前目录的内容后退出.这会导致ls
运行的窗口关闭.
setw -t servers remain-on-exit on
Run Code Online (Sandbox Code Playgroud)
应该在命令退出后保持名为'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
Run Code Online (Sandbox Code Playgroud)
根据您的上一条评论,忽略上述内容,并将new
命令替换为
new -A -s 'main' -n 'servers'
send-keys -t servers.0 ls Enter
Run Code Online (Sandbox Code Playgroud)
这将创建一个常规窗口,其命令是常规shell,但随后模拟ls
在第一个shell提示符下键入命令,以便为您提供该目录中的文件列表.后ls
完成,你是回到了壳,而面板将继续存在,直到完成自己的壳.