目前在bash shell中使用Solaris 10.在查看脚本时,我注意到设置了pathmunge过程以避免在PATH中重复文件夹路径(它似乎也具有在PATH的开头或结尾添加必要文件夹的功能).
除了能够追加/预先挂起(赦免,如果这是错误的术语)到PATH,为什么我们不能简单地做echo ${PATH} | grep <folder one wishes to add>?
如果我唯一的意图是在PATH中有一个特定的文件夹(而不是真正关心开头或结尾),那么grep会用于此目的吗?
Ori*_*Ori 10
pathmunge使用grep本身.(好吧,egrep,确切地说.)
在Red Hat,CentOS等中,pathmunge的定义/etc/profile如下:
pathmunge () {
if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
if [ "$2" = "after" ] ; then
PATH=$PATH:$1
else
PATH=$1:$PATH
fi
fi
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它比您的建议略微复杂,但并不多.你的提案不起作用的原因是如果没有分隔符,它将进行部分匹配.
所以如果我的路径是/usr/local/sbin:/usr/local/bin,echo ${PATH} | grep /usr/local将返回true,即使/ usr/local不在我的路径中.所以你需要匹配分隔符.但是如果你grep for :/usr/local:you也会失败,因为你永远不会匹配路径中的第一个或最后一个项目,因为$ PATH既不以分隔符开始也不以分隔符结束.这就是使用egrep的原因.(^ | :)匹配冒号或行的开头.($ | :)匹配冒号或行尾.