Tmux

為什麼在獲取命令時需要“split-window”才能在視窗 0 中獲取 shell?

  • April 14, 2021

我使用與此等效的東西恢復我的項目的常用設置:

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

但是當一切都設置好後,視窗 0 不見了

如果沒有問題split-window,則僅在視窗 0 的窗格中執行的程式碼是tmux source-file $setup_file$setup_file已由原始外殼擴展)。當一切都設置好後,這個命令終止,所以唯一的窗格終止,所以視窗終止。

這將是不同的

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

請注意,此命令的引用比原始命令“更好”,但仍未正確引用。由於以下原因,可以在 Bash 中實現正確的引用${var@Q}

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

引用自:https://unix.stackexchange.com/questions/645097