如果 $PATH 中尚未包含路径,请将路径添加到 $PATH

如果 $PATH 中尚未包含路径,请将路径添加到 $PATH

我需要在脚本中添加路径bash,但它可能会执行多次:

export PATH=${OPENSHIFT_HOMEDIR}/app-root/runtime/bin/:${PATH}

我不希望一遍又一遍地添加该路径。如果还没有,如何添加$PATH

答案1

首先检查要添加的路径是否已经是变量的一部分:

[[ ":$PATH:" != *":/path/to/add:"* ]] && PATH="/path/to/add:${PATH}"

如果/path/to/add已在 中$PATH,则不会发生任何情况,否则将其添加到开头。

如果您最终需要它,PATH=${PATH}:/path/to/add请改为使用。

编辑:在你的情况下,它看起来像这样:

[[ ":$PATH:" != *":${OPENSHIFT_HOMEDIR}/app-root/runtime/bin:"* ]] && PATH="${OPENSHIFT_HOMEDIR}/app-root/runtime/bin:${PATH}"

答案2

我以前的实验室中的系统管理员为此提供了一个漂亮的小功能:

pathmunge () {
        if ! echo "$PATH" | /bin/grep -Eq "(^|:)$1($|:)" ; then
           if [ "$2" = "after" ] ; then
              PATH="$PATH:$1"
           else
              PATH="$1:$PATH"
           fi
        fi
}

它会检查给定的字符串是否已经在 中,PATH并且还允许您根据需要将其添加到末尾或开头:

$ echo $PATH
/usr/local/bin:/usr/bin:/bin
$ pathmunge /sbin/             ## Add to the start; default
$ echo $PATH
/sbin/:/usr/local/bin:/usr/bin:/bin
$ pathmunge /usr/sbin/ after   ## Add to the end
$ echo $PATH
/sbin/:/usr/local/bin:/usr/bin:/bin:/usr/sbin/

我的程序中有这个函数~/.profile,并用它来修改我的$PATH.

答案3

如果是相同的字符串,那么就这样做:

set -a -- "$OPENSHIFT_HOMEDIR/app-root/runtime/bin/"
PATH=$1:${PATH#"$1:"}
set +a --

你可以一遍又一遍地这样做,并且 的值$PATH不会改变。

或者您可以检查一下。

set -a -- "$OPENSHIFT_HOMEDIR/app-root/runtime/bin/"
case :${PATH:=$1}: in
(*:"$1":*) ;; (*)
    PATH=$1:$PATH
esac;  set +a --

答案4

使用 GNU sed 你可以这样做

echo ${PATH} | 
    sed "\|${OPENSHIFT_HOMEDIR}/app-root/runtime/bin|\
        ! s|^|export PATH=${OPENSHIFT_HOMEDIR}/app-root/runtime/bin:|e"

相关内容