在bash中只将一个目录添加到路径变量(如$ PATH)中一次?

时间:2014-11-06 08:49:11

标签: bash path

我怎样才能在bash中添加一个测试,检查一个给定的目录(比如/usr/local/bin)是否已经在一个变量中,比如说$PATH,然后再实际执行呢?

上下文:我正在为script创建package I maintain,我希望包含安装依赖项的所有步骤。这涉及更改$PATH变量,但我的问题更为一般(例如,更改也涉及$PYTHONPATH)。但是,我也希望不与现有的变量混在一起,如果它已经存在,也不要加前置。

2 个答案:

答案 0 :(得分:2)

使用grep即可测试

echo "$PATH" | grep -o '/usr/local/bin'

示例:

var=$(echo $PATH | grep -o  '/usr/local/bin')
if [ -n "$var" ] ; then
    echo 'already Existe' 
else
    echo 'Not exists' 
fi

<强>输出:

already Existe

答案 1 :(得分:0)

您可以这样检查:

export p='/usr/local/bin'
(IFS=: a=("$PATH"); printf "%s\n" "${a[@]}"|grep -xq "$p") && echo "exists" || echo "nope"
exists

export p='/usr/local/bin123'
(IFS=: a=("$PATH"); printf "%s\n" "${a[@]}"|grep -xq "$p") && echo "exists" || echo "nope"
nope

使用的grep选项:

  • -x - &gt;完全匹配
  • -q - &gt;安静,只返回退出状态