为什么在获取命令时需要“split-window”才能在窗口 0 中获取 shell?

为什么在获取命令时需要“split-window”才能在窗口 0 中获取 shell?

我使用与此等效的内容恢复项目的常见设置:

setup_file=myproj.tmux
tmux new-session "tmux source-file $setup_file"

我通常认为启动一个新会话然后从中获取命令$setup_file相当于在新 shell 中手动执行这些 tmux 命令,但事实并非如此!不同之处在于,在采购时,窗口 0 中似乎没有创建任何 shell,因此当我执行neww此命令时,会创建一个窗口 1,但当所有内容都设置完毕后,窗口 0 会丢失。为了解决这个问题,我执行了split-window,但我不明白为什么我需要这样做。线索?

myproj.tmux

# window 0 - cli
rename-window 'cli';
split-window # not sure why this is needed to get a shell. Otherwise there is no window 0!

# window 1 - main window in the left pane and 3 minor windows in the right pane
neww
rename-window 'tools'
send-keys 'nvim' C-m  # editor
split-window -h -p 40 # build window (webpack, etc)
split-window -v -p 80             # cli
split-window -v -p 50             # test runner?
select-pane -L; # select the left pane; nvim

答案1

但当一切都设置完毕后,窗口 0 丢失了

如果没有可疑的split-window,则仅在窗口 0 的窗格中运行的代码是tmux source-file $setup_file$setup_file已由原始 shell 扩展)。当一切设置完毕后,此命令将终止,因此唯一的窗格将终止,因此窗口将终止。

情况会有所不同

tmux new-session "tmux source-file '$setup_file'; '$SHELL'"

请注意,该命令的引用比原始命令“更好”,但仍然没有正确引用。在 Bash 中,可以通过以下方式实现正确的引用${var@Q}

tmux new-session "tmux source-file ${setup_file@Q}; ${SHELL@Q}"

相关内容