it-swarm.com.de

Fügen Sie einen Pfad zu $ ​​PATH hinzu, falls dieser noch nicht in $ PATH enthalten ist

Ich muss einen Pfad in ein bash -Skript einfügen, dieser kann jedoch mehrmals ausgeführt werden:

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

Ich möchte nicht, dass dieser Pfad immer wieder hinzugefügt wird. Wie kann ich es hinzufügen, wenn es noch nicht in $PATH Ist?

34

Überprüfen Sie zunächst, ob der hinzuzufügende Pfad bereits Teil der Variablen ist:

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

Wenn /path/to/add ist bereits in der $PATH, dann passiert nichts, sonst wird es am Anfang hinzugefügt.

Wenn Sie es am Ende brauchen, verwenden Sie PATH=${PATH}:/path/to/add stattdessen.

Bearbeiten: In Ihrem Fall würde es so aussehen:

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

Der Systemadministrator in meinem alten Labor hatte dafür eine nette kleine Funktion:

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

Es wird sowohl geprüft, ob sich die angegebene Zeichenfolge bereits in PATH befindet, als auch Sie können sie wie gewünscht am Ende oder am Anfang hinzufügen:

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

Ich habe diese Funktion in meinem ~/.profile Und verwende sie, um meinen $PATH Zu ändern.

20
terdon

Wenn es der gleiche String ist, dann mach es einfach:

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

Sie können das immer und immer wieder tun und den Wert von $PATH wird sich nicht ändern.

Alternativ können Sie dies überprüfen.

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

Mit GNU sed) können Sie dies tun

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