在我的用户环境中,我/(macports)已将我的 PATH 设置为以下形式
PATH=app1/bin:app2/bin/:...:$PATH
但是,如果我有嵌套的 shell,PATH 变量就会一直连接在一起,当然这不是一个大问题,但是,难道没有更好的解决方案吗?
答案1
您可以轻松检查该目录是否已在 PATH 中:
for dir in app1/bin app2/bin; do
if [[ :"$PATH": != *:"$dir":* ]]; then
PATH="$dir:$PATH"
fi
done
它正在 PATH 中查找以冒号分隔的目录。请注意,星号需要位于引号之外,如图所示。
另一种写法:
[[ :"$PATH": != *:app1/bin:* ]] && PATH="app1/bin:$PATH"
[[ :"$PATH": != *:app2/bin:* ]] && PATH="app2/bin:$PATH"
答案2
好的,问题很简单,PATH 原样对于嵌套 shell 仍然有效,即我们不应该重新评估 PATH 变量,即不要将其包含在 中.bashrc|.zshrc
,而是将其放入 中.profile|.zprofile
。配置文件配置为每个登录 shell 运行一次。在这种情况下,您可以将配置文件配置视为初始配置。