この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

あなたの構文は有効なシェルではありません。 2つの異なる独立したシェルコマンドを接続するか、コマンド&&では使用できません。テストのいくつかのバージョンが提供され使用されます。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

関連情報