.tmux.conf
현재 사용 중인 시스템 유형에 따라 파일의 특정 부분을 조건부로 만들 려고 합니다 . 첫째, MacOS에서는 한 부분만 작업하고 싶습니다.
매뉴얼 페이지에는 #(COMMAND)
구문을 사용하여 특히 조건부 형식의 출력을 바꿀 수 있다고 나와 있습니다 COMMAND
. 그래서 나는 이것을 시도하고 있습니다 :
%if "#{==:#(/usr/bin/uname -s),Darwin}"
CONF-COMMANDS
%endif
하지만 운이 좋지 않습니다. CONF-COMMANDS
Mac에서는 무시됩니다. 물론 "Darwin"이 실제로 출력되는 것을 확인했습니다 uname -s
. 보시다시피 저는 모든 PATH
문제를 제거하기 위해 절대 파일 이름을 사용하고 있습니다. 또한 이 간단한 조건이 %if "#{==:Darwin,Darwin}"
실제로 작동하는지 확인했습니다 . 그래서 구문 측면에서 뭔가 잘못하고 있는 것 같습니다. 그것은 무엇입니까?
답변1
나는 당신이 매뉴얼 페이지에 설명된 상황에 직면했다고 생각합니다:
형식을 빌드할 때 tmux는
#()
명령이 완료될 때까지 기다리지 않고 동일한 명령을 실행한 이전 결과를 사용하거나 명령이 이전에 실행되지 않은 경우 자리 표시자를 사용합니다.
다음을 통해 Tmux 세션에서 이를 시연할 수 있습니다.
tmux display-message -p "#(uname -s)"
반환되어야 합니다 <'uname -s' not ready>
.
다음 if-shell
대안을 사용해 보세요 %if
.
tmux if-shell '[ "$(uname -s)" = "Darwin" ]' "CONF-COMMAND; CONF-COMMAND2; ..."
Tmux 3.2a에서는 구문이 더 명확합니다.
tmux if-shell '[ "$(uname -s)" = "Darwin" ]' {
CONF-COMMAND1
CONF-COMMAND2
}
Mac에서는 테스트되지 않았지만 WSL/Ubuntu/Bash에서 작동하는 것으로 확인되었습니다. Mac/Zsh에서 작동해야 한다고 생각합니다.