我有一个可重现的问题:
- 在 Bash .profile 中设置我的 PATH
tmux
通过或tmux attach
任何其他方式启动 tmux- echo $PATH 并查看其具有相同组件但不同顺序
如何阻止这种现象?这又该如何解释呢?
答案1
如果您使用的是 Mac,并且一直想知道为什么/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
在运行 tmux 时会不断将其添加到 PATH 前面,这是因为从您的/etc/profile
文件中运行了一个名为 path_helper 的实用程序。
您无法轻易说服 tmux(或者更确切地说是 bash)不要进行源代码/etc/profile
(由于某种原因,tmux 始终作为登录 shell 运行,这意味着将读取 /etc/profile),但您可以确保 path_helper 的效果不会影响您的 PATH。
诀窍是在 path_helper 运行之前确保 PATH 为空。在我的~/.bash_profile
文件中,我有以下内容:
if [ -f /etc/profile ]; then
PATH=""
source /etc/profile
fi
在 path_helper 执行之前清除 PATH 将阻止它将默认 PATH 添加到您(之前)选择的 PATH 之前,并允许您的其余个人 bash 设置脚本(下面的命令.bash_profile
,或者.bashrc
如果您从中获取它,则在 中.bash_profile
)相应地设置您的 PATH。
希望这有意义...
答案2
不;排序$PATH
是一件太疯狂的事情,因为许多系统依赖于用户设置的顺序。
然而,tmux做以“登录”模式启动你的 shell,从而~/.profile
导致再次。这意味着如果你PATH=/my/dir:/another/dir:$PATH
在该文件中有类似的东西,它会再次发生,导致 $PATH 包含/my/dir:/another/dir:/my/dir:/another/dir:(etc.)
。为了避免这种情况,您可以使用另一个变量来检查:
if [ "$_SKIP_PROFILE" ]; then
return 0
else
export _SKIP_PROFILE=y
fi
export PATH="/my/dir:/another/dir:$PATH"
答案3
@Graham Ashton 谢谢你的想法
我的建议是
if [ -f /etc/profile ]; then
PATH=""
source /etc/profile
fi
在 .zshrc 文件顶部。
确保您的
export NVM_DIR="$HOME/.nvm"
. "/usr/local/opt/nvm/nvm.sh"
在下面。