【问题标题】:Adding directory to a path variable (like $PATH) just once in bash?仅在 bash 中将目录添加到路径变量(如 $PATH)一次?
【发布时间】:2015-01-02 16:54:07
【问题描述】:

如何在 bash 中添加一个测试,检查给定目录(例如 /usr/local/bin)是否已经在变量中,例如 $PATH,然后再实际执行?

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

【问题讨论】:

  • 如果您查看可能重复的答案,您会发现它们完全不同(检测与添加一次)。就社区而言,仅仅为此而对这个问题投反对票似乎是非常低效的。
  • 您的问题是关于检测,而不是关于添加。我将您的问题标记为重复,但没有投反对票。

标签: bash path


【解决方案1】:

使用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

【讨论】:

  • 感谢您的回答。它完全符合我的需要!
【解决方案2】:

你可以这样检查:

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 -> 完全匹配
  • -q -> 安静,只是返回退出状态

【讨论】:

    猜你喜欢
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 2019-08-28
    相关资源
    最近更新 更多