在我的用户环境中,I /(macports)已经把我的PATH设置成了
PATH=app1/bin:app2/bin/:...:$PATH
但是,如果我嵌套了shell,那么PATHvariables会一直被连接起来,当然这不是一个大问题,但是还有没有更好的解决scheme?
您可以很容易地检查该目录是否已经在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"
好的,问题是,PATH as-is对于嵌套shell仍然有效,也就是说,我们不应该重新计算PATHvariables,也就是说,不要在.bashrc|.zshrc
.profile|.zprofile
包含这个variables,而是将其放在.profile|.zprofile
。 configuration文件configuration为每个loginshell运行一次。 在这种情况下,您可以将configuration文件configuration看作是初始configuration。