【问题标题】:How to check if PATH already contains a particular directory [duplicate]如何检查PATH是否已经包含特定目录[重复]
【发布时间】:2014-01-09 12:26:08
【问题描述】:

我希望能够重新加载用户 .profile 以便它“永久”更新 PATH 而无需重新启动系统。这是我在 .profile 文件中所做的,但它不起作用。

if [[$PATH != "*path_to_directory*"]];then
     PATH=<path_to_directory>:$PATH
fi

将添加的内容保存到 .profile 后,我运行 source .profile 重新加载它,但我得到一个错误并且我的 PATH 没有更新。

【问题讨论】:

  • 你得到了什么错误

标签: bash ubuntu


【解决方案1】:

您的陈述有 2 个问题。首先,您需要在[[]] 之前添加一个空格。其次,* 应该在引号之外以匹配字符串:

if [[ $PATH != *"path_to_directory"* ]];then
    echo "adding path to directory"
    PATH=path_to_directory:$PATH
fi

所以输出将是:

$ echo $PATH
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/usr/local/git/bin
$ source .profile
adding path to directory
$ echo $PATH
path_to_directory:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/usr/local/git/bin
$ source .profile
$ echo $PATH
path_to_directory:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/usr/local/git/bin

【讨论】:

  • 我是脚本新手,我没有意识到空格真的很重要!
【解决方案2】:

Ubuntu 带有一个名为pathmunge 的便捷实用程序函数。该实用程序完全符合您的要求...它会在您的路径中添加一个目录,除非它已经存在。

这是我为 OSX 编写的重复版本(但应该适用于大多数 *nix 系统)

function pathmunge() {
    if [ "$2" = "force" ] || ! echo $PATH | $(which egrep) -q "(^|:)$1($|:)" ; then
        if [ "$2" = "after" ] ; then
            PATH=$PATH:$1
        else
            PATH=$1:$PATH
        fi
        export PATH
    fi
}

这是你使用它的方式:

# Modify the path
pathmunge /usr/local/bin        force
pathmunge /usr/local/sbin       force
pathmunge $HOME/.rbenv/bin
pathmunge /usr/local/heroku/bin
pathmunge $HOME/bin             after

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    • 2014-01-15
    相关资源
    最近更新 更多