Tmux
為什麼在獲取命令時需要“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
但是當一切都設置好後,視窗 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}"