Ich hätte gerne eine Möglichkeit, Dinge zu $PATH hinzuzufügen, systemweit oder für einen einzelnen Benutzer, ohne möglicherweise denselben Pfad mehrmals hinzuzufügen.
Ein Grund dafür ist, dass Ergänzungen in .bashrc
vorgenommen werden können , das keine Anmeldung erfordert und auch auf Systemen nützlicher ist, die (z. B.) lightdm
verwenden , die niemals .profile
aufruft .
Mir sind Fragen bekannt, die sich mit der Bereinigung von Duplikaten aus $PATH befassen, aber ich möchte keine Duplikate entfernen . Ich hätte gerne eine Möglichkeit, Pfade hinzuzufügen, wenn sie noch nicht vorhanden sind.
Akzeptierte Antwort:
Angenommen, der neue Pfad, den wir hinzufügen möchten, lautet:
new=/opt/bin
Dann können wir unter Verwendung einer beliebigen POSIX-Shell testen, ob new
befindet sich bereits im Pfad und fügen Sie es hinzu, wenn dies nicht der Fall ist:
case ":${PATH:=$new}:" in
*:"$new":*) ;;
*) PATH="$new:$PATH" ;;
esac
Beachten Sie die Verwendung von Doppelpunkten. Ohne die Doppelpunkte könnten wir denken, dass dies beispielsweise new=/bin
ist war bereits im Pfad, da das Muster auf /usr/bin
passte . Während PATHs normalerweise viele Elemente haben, werden auch die Sonderfälle von Null- und Eins-Elementen im PATH behandelt. Der Fall, dass PATH anfänglich keine Elemente hat (leer ist), wird durch die Verwendung von ${PATH:=$new}
gehandhabt die PATH
zuweist zu $new
wenn es leer ist. Das Festlegen von Standardwerten für Parameter auf diese Weise ist ein Merkmal aller POSIX-Shells:siehe Abschnitt 2.6.2 der POSIX-Dokumentation.)
Eine aufrufbare Funktion
Der Einfachheit halber kann der obige Code in eine Funktion eingefügt werden. Diese Funktion kann auf der Befehlszeile definiert oder, um sie dauerhaft verfügbar zu haben, in das Initialisierungsskript Ihrer Shell eingefügt werden (für Bash-Benutzer wäre das ~/.bashrc
):
pupdate() { case ":${PATH:=$1}:" in *:"$1":*) ;; *) PATH="$1:$PATH" ;; esac; }
So verwenden Sie diese Pfadaktualisierungsfunktion, um ein Verzeichnis zum aktuellen PATH hinzuzufügen:
pupdate /new/path