창 0에서 셸을 가져오는 명령을 가져올 때 "분할 창"이 필요한 이유는 무엇입니까?

창 0에서 셸을 가져오는 명령을 가져올 때 "분할 창"이 필요한 이유는 무엇입니까?

다음과 같은 것을 사용하여 프로젝트의 공통 설정을 복원합니다.

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

나는 일반적으로 새 세션을 시작하고 그 세션에서 명령을 받는 것이 $setup_file새 셸에서 이러한 tmux 명령을 수동으로 실행하는 것과 동일하다고 생각하지만 그렇지 않습니다! 차이점은 소싱할 때 창 0에는 쉘이 생성되지 않는 것 같아서 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원래 셸로 확장됨) 됩니다. 모든 것이 설정되면 이 명령이 종료되므로 유일한 창이 종료되므로 창이 종료됩니다.

상황이 달라질 거야

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

이 명령은 원래 명령보다 "더 잘" 인용되지만 여전히 올바르게 인용되지는 않습니다. Bash에서는 다음을 통해 올바른 인용을 얻을 수 있습니다 ${var@Q}.

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

관련 정보