Tmux if-shell 조건은 항상 false입니다.

Tmux if-shell 조건은 항상 false입니다.

상위 셸(bash)에서 상속된 값을 기반으로 TERM내 tmux 세션에 대한 환경 변수를 설정하려고 합니다 . 실제로 상속되도록 내 파일에는 다음 줄이 있습니다 ..tmux.confTERM.tmux.confTERM

set -g update-environment '...some variables... TERM'

기본적으로 상위 셸에 TERM있으며 이를 감지하고 다음을 사용하여 옵션을 설정합니다.xterm-256colordefault-terminal

if "[[ ${TERM} =~ 256color ]]" 'set -g default-terminal screen-256color'

해당 행은 내 작업 PC(RHEL 6.6)의 tmux 1.9a에서 작동하고 로 올바르게 설정되지만 TERM다른 screen-256colorPC(tmux 1.8을 실행하는 직장의 Ubuntu PC 및 tmux 2.1을 실행하는 내 집 Ubuntu PC 포함)에서는 'condition' 명령이 항상 false를 반환하는 것 같고 여전히 새 tmux 세션 내에 TERM있습니다 .screen

나는 또한 을 시도했지만 if 'true' 'set -g default-terminal screen-256color'그것도 작동하지 않았습니다! ( TERM아직 screen새 tmux 세션 내에 있습니다).

누구든지 내가 뭘 잘못하고 있는지 알아내도록 도와줄 수 있나요? 그리고 한 컴퓨터에서는 작동하지만 다른 두 컴퓨터에서는 작동하지 않는 이유에 대한 정보를 제공할 수 있습니까?


업데이트:

tmux매우 자세한 정보를 켠 상태에서 실행한 후 ( tmux -vvvvvvvvvv) 문제가 보이는 것 같습니다.

서버 로그 파일(tmux-server-xxxx.log)을 보면 tmux다음 로그 줄이 이 순서대로 표시됩니다(그 사이에 생략한 다른 줄 포함).

run job 0x55fbca2e7240: [[ xterm-256color =~ 256color ]], pid 4955
cmdq 0x55fbca2dc250: new-session (client 7)
session 0 created
job died 0x55fbca2e7240: [[ xterm-256color =~ 256color ]], pid 4955

그래서 새 세션이 생성되는 것처럼 보입니다.~ 전에쉘 명령이 종료되므로 나중에 세션 옵션이 설정되지 않습니다.~이다설정중입니다.

이를 확인하려면 이 세션을 분리한 경우 /sets 를 .tmux.conf확인하는 줄을 주석 처리하도록 편집한 다음 새 세션을 만듭니다 . 해당 새 세션에는 .$TERMdefault-terminalTERM = screen-256color

명령이 예상대로 작동하는 RHEL 컴퓨터에서는 다음 로그 줄이 다른 순서로 나타납니다.

run job 0x1e82ce0: [[ xterm-256color =~ 256color ]], pid 17656
job died 0x1e82ce0: [[ xterm-256color =~ 256color ]], pid 17656
cmdq 0x1e66850: new-session (client 7)
session 0 created

...예상대로군요. 그리고 TERM로 적절하게 설정됩니다 screen-256color.

-b명령 에 옵션을 지정하지 않았 if-shell으므로 이 두 Ubuntu 시스템에서 내 명령이 백그라운드에서 실행되는 것처럼 보이는 이유가 확실하지 않습니다. 이것이 tmux에서 가능한 경쟁 조건인지 궁금합니다.

답변1

업데이트 전 질문에 대한 답변이 있을 것 같습니다.

명시된 바와 같이여기:

tmux는 /bin/sh -c를 사용하여 우리가 지정한 쉘 명령을 실행합니다. 따라서 명령은 POSIX와 호환되어야 하므로 [[ 형식의 테스트는 이식성이 보장되지 않습니다. 예를 들어 최신 Ubuntu 및 Debian 시스템은 /bin/sh를 대시로 심볼릭 링크합니다.

내 경우에는 그랬다. "your" 메소드를 다음으로 대체하면 모든 것이 작동합니다. if-shell "echo $TERM | grep 256color" 'set -g default-terminal screen-256color'

관련 정보