我正在写一个脚本来解决我经常遇到的问题。
其中一个问题是路径中缺少/sbin。但事实并非总是如此,所以与其不加区别地将其添加到.profile.bash_profile.bashrc等中,不如这样:

echo "export PATH=\"$PATH:/sbin\"" >> ~/.bashrc

……随着时间的推移,最后出现多个export PATHs,最后出现:/sbin:/sbin:/sbin:/sbin:/sbin。好吧,你明白了。我该怎么处理?

最佳答案

有一种方法:

echo '[[ ":$PATH:" == *:/sbin:* ]] || PATH="$PATH:/sbin"' >> ~/.bashrc

(顺便说一下,在更新已经是环境变量的内容时,您不需要export。)
工作原理:
有关[[ expression ]]的一般信息,特别是==的信息,请参见the Bash Reference Manual, § 3.2.4.2 "Conditional Constructs"
因此[[ ":$PATH:" == *:/sbin:* ]]是一个命令,如果:$PATH:包含:/sbin:,则返回0(=成功),否则返回1(=不成功)。
有关command1 || command2,请参见the Bash Reference Manual, § 3.2.3 "Lists of Commands"
因此[[ ":$PATH:" == *:/sbin:* ]] || PATH="$PATH:/sbin"是一个命令列表,如果PATH="$PATH:/sbin"包含:$PATH:,则运行:/sbin:,否则不运行。

关于linux - 如何将目录添加到$ PATH中,但前提是该目录尚不存在,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52564820/

10-12 00:53