bash
スクリプトにパスを追加する必要がありますが、複数回実行される可能性があります。
export PATH=${OPENSHIFT_HOMEDIR}/app-root/runtime/bin/:${PATH}
そのパスが何度も追加されたくありません。 $PATH
に含まれていない場合、どうすれば追加できますか?
最初に、追加するパスがすでに変数の一部であるかどうかを確認します。
[[ ":$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}"
私の古いラボのsysadminには、これに対して気の利いた小さな機能がありました。
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
を変更します。
同じ文字列の場合は、次のようにします。
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 --
GNU sedを使用すると、
echo ${PATH} |
sed "\|${OPENSHIFT_HOMEDIR}/app-root/runtime/bin|\
! s|^|export PATH=${OPENSHIFT_HOMEDIR}/app-root/runtime/bin:|e"