$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"

관련 정보