如何检查PATH是否已包含特定目录

时间:2013-12-20 15:36:19

标签: bash ubuntu

我希望能够重新加载用户.profile,以便“永久”更新PATH而无需重新启动系统。这就是我在.profile文件中所做的事情而且它无法正常工作。

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

在我将该添加内容保存到.profile后,我运行源.profile重新加载它,但我只是收到错误而我的PATH没有更新。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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