Setup-Zeilen für Umgebungsvariablen mit mehreren Pfaden mit Bash


11

Ich habe sehr lange export PATH=A:B:C .... Kann ich mehrere Zeilen erstellen, um eine wie folgt besser zu organisieren?

export PATH = A:
              B:
              C:

Antworten:


22

Du kannst tun:

export PATH="A"
export PATH="$PATH:B"
export PATH="$PATH:C"

Jede nachfolgende Zeile wird an den zuvor definierten Pfad angehängt. Dies ist im Allgemeinen eine gute Angewohnheit, da dadurch vermieden wird, dass der vorhandene Pfad zerstört wird. Wenn die neue Komponente Vorrang haben soll, tauschen Sie die Reihenfolge aus:

export PATH="A"
export PATH="B:$PATH"
export PATH="C:$PATH"

Alternativ können Sie möglicherweise Folgendes tun:

export PATH=A:\
B:\ 
C

wo \markiert eine Linienfortsetzung. Ich habe diese Methode nicht getestet.


2
Beachten Sie, dass dies exportein integrierter Befehl ist, weder ein Schlüsselwort noch eine syntaktische Zuweisung. Wenn Sie also PATHElemente haben , die Leerzeichen (oder Glob-Zeichen) enthalten, benötigen Sie doppelte Anführungszeichen export PATH="$PATH:B". Sie könnten auch schreiben PATH=$PATH:Bund so weiter; Sie müssen exporteine Variable nur einmal verwenden, nicht jedes Mal, wenn sie sich ändert (außer in einigen sehr alten Bourne-Shells), und Sie benötigen keine doppelten Anführungszeichen in einer Zuweisung.
Gilles 'SO - hör auf böse zu sein'

1
Funktioniert auch PATH+=:Bfür die Verkettung von Zeichenfolgen.
Aryeh Leib Taurog

4

Sie können Zeilen in Bash mit einem Backslash am Ende einer Zeile wie folgt erweitern:

export PATH=/path/A:\
/path/B:\
/path/C

Bitte beachten Sie, dass das Fehlen von Leerzeichen hier wichtig ist.


0

Ein anderer Ansatz:

export PATH=$(tr -d $'\n ' <<< "
   /path/A:
   /path/B:
   /path/C")

Hat den zusätzlichen Vorteil, dass Sie Ihre Einrückungsstufen nicht durcheinander bringen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.