tmux 구성: 명령 출력 대체는 그렇지 않습니다.

tmux 구성: 명령 출력 대체는 그렇지 않습니다.

.tmux.conf현재 사용 중인 시스템 유형에 따라 파일의 특정 부분을 조건부로 만들 려고 합니다 . 첫째, MacOS에서는 한 부분만 작업하고 싶습니다.

매뉴얼 페이지에는 #(COMMAND)구문을 사용하여 특히 조건부 형식의 출력을 바꿀 수 있다고 나와 있습니다 COMMAND. 그래서 나는 이것을 시도하고 있습니다 :

%if "#{==:#(/usr/bin/uname -s),Darwin}"
CONF-COMMANDS
%endif

하지만 운이 좋지 않습니다. CONF-COMMANDSMac에서는 무시됩니다. 물론 "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에서 작동해야 한다고 생각합니다.

관련 정보