我需要在脚本中添加路径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"