이 exec 명령이 zshrc에서만 작동하고 구성 파일에서는 작동하지 않는 이유는 무엇입니까?

이 exec 명령이 zshrc에서만 작동하고 구성 파일에서는 작동하지 않는 이유는 무엇입니까?

이 질문은 매우 간단하지만 한쪽에서는 어떻게 작동하고 다른 쪽에서는 작동하지 않는지 알아야 합니다. tmux가 닫힐 때 ssh 세션을 종료하려면 다음 링크에 제안된 답변을 사용했습니다.https://stackoverflow.com/a/17465215

/etc/zsh/zprofile에 유사한 코드를 배치했는데 작동하지만 /etc/profile에 동일한 코드를 배치하면 ssh 로그인 직후 tmux 세션이 종료됩니다. 무슨 일이 일어나고 있습니까?

PS: 문제의 코드는 다음과 같습니다.

if [[ -z $TMUX && -n $SSH_TTY ]]; then
     exec tmux -2 new-session -s $TTY
fi

답변1

귀하의 구문은 유효한 쉘이 아닙니다. 두 개의 서로 다른 독립적인 셸 명령을 연결하며 또는 명령 &&에서는 사용할 수 없습니다 . 테스트의 일부 버전이 제공 되고 사용됩니다.test[[[-a-o그리고그리고또는, 일부는 그렇지 않습니다.

또한 /etc/profile( .d배포판에 디렉터리가 있는 경우 해당 디렉터리도) 모든 POSIX 셸에서 실행 가능해야 합니다. 따라서 [[POSIX에 없는 것은 POSIX에서 허용되지 않으며 /etc/profile문제가 발생할 수 있습니다.

POSIX 호환 방식으로 작성하려면 /etc/profile다음과 같이 작성할 수 있습니다.

if [ -z "$TMUX" ] && [ -n "$SSH_TTY" ]; then
     exec tmux -2 new-session -s "$TTY"
fi

관련 정보