为什么这个 exec 命令只在 zshrc 中有效,但在配置文件中无效?

为什么这个 exec 命令只在 zshrc 中有效,但在配置文件中无效?

这个问题将非常简单,但我需要知道这如何在一侧工作但在其他地方则不然,要在 tmux 关闭时结束 ssh 会话,我使用了此链接中提出的答案:https://stackoverflow.com/a/17465215

我在 /etc/zsh/zprofile 中放置了类似的代码并且它可以工作,但是如果我在 /etc/profile 中放置相同的代码,tmux 会话在 ssh 登录后立即结束,发生了什么?

PS:有问题的代码是这样的:

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

答案1

您的语法不是有效的 shell。 &&连接两个不同且独立的 shell 命令,并且不能在test, [or[[命令中使用。某些版本的测试提供-a-o用于或者,有些则不然。

此外,/etc/profile(以及.d目录,如果您的发行版有的话)必须能够由任何 POSIX shell 运行。因此,[[POSIX 中没有的 ,在 POSIX 中是不可接受的,/etc/profile并且可能会破坏事物。

如果你想以 POSIX 兼容的方式编写/etc/profile,你可以这样写:

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

相关内容