Kann jemand erklären, was dieser Befehl bedeutet?
PATH="${GZIP_BINDIR-'/bin'}:$PATH"; export PATH
Kann jemand erklären, was dieser Befehl bedeutet?
PATH="${GZIP_BINDIR-'/bin'}:$PATH"; export PATH
Antworten:
${GZIP_BINDIR-'/bin'}
ist ein bash
Parametererweiterungsmuster. Von man bash
:
${parameter:-word}
Use Default Values. If parameter is unset or null,
the expansion of word is substituted. Otherwise, the value of parameter
is substituted.
Unmittelbar vor dieser Portion hat die Manpage (danke an @jwodder für die Benachrichtigung):
Omitting the colon results in a test only for a parameter that is unset.
Wie in der Manpage angegeben, wird der Standardwert der Variablen festgelegt GZIP_BINDIR
. Wenn GZIP_BINDIR
zuvor ein Wert festgelegt wurde (außer Null, da Sie ihn nicht verwenden :
), wird dieser Wert verwendet, andernfalls /bin
wird er als Wert der Variablen verwendet GZIP_BINDIR
.
Wenn Sie andererseits auch auf Nullwerte testen möchten, verwenden Sie dieses Muster (include :
):
${GZIP_BINDIR:-'/bin'}
Danach $PATH
wird das auf die Werte erweitert, die es zuvor gehalten hat. Also, wenn PATH
zuvor:
/usr/sbin:/usr/bin
Nun wird dein PATH
Wille (sofern GZIP_BINDIR
nicht festgelegt):
/bin:/usr/sbin:/usr/bin
export PATH
stellt dies PATH
allen untergeordneten Prozessen zur Verfügung.
:-
: "Wenn Sie keine Teilzeichenfolgenerweiterung durchführen, testen Sie mit den unten dokumentierten Formularen (z. B. :-), ob der Parameter nicht gesetzt oder null ist. Lassen Sie den Doppelpunkt weg führt zu einem Test nur für einen Parameter, der nicht gesetzt ist. "
PATH
und export
in einem einzigen Befehl wie folgt kombinieren :export PATH="${GZIP_BINDIR-'/bin'}:$PATH"
Befindet sich in der Parametererweiterung wirklich kein Doppelpunkt vor dem Bindestrich ${GZIP_BINDIR-'/bin'}
?
Diese Art von Konstrukt wird fast immer mit einem Doppelpunkt geschrieben, ${GZIP_BINDIR:-'/bin'}
was bedeutet: "Wenn $ GZIP_BINDIR NULL ist oder nicht gesetzt ist, setze es auf '/ bin'".
Die von Ihnen angegebene Syntax ist jedoch gültig, aber selten. ${GZIP_BINDIR-'/bin'}
(kein Doppelpunkt) bedeutet, "wenn $ GZIP_BINDIR nicht gesetzt ist, setze es auf '/ bin'". Wenn es gesetzt ist (deklariert wurde), aber nichts zugewiesen ist (z. B. NULL), wird nichts eingefügt.
Es kann hier ein Fehler sein , obwohl als Doppelpunkt folgt dem variablen construct (...} :
$ PATH ...) wird noch eingefügt werden , wenn $ GZIP_BINDIR Satz ist aber NULL. Da dies zu Beginn des $ PATH einen Doppelpunkt hinzufügen würde, wird das aktuelle Verzeichnis zuerst durchsucht.
Dies wird von den meisten als Sicherheitsproblem angesehen, da es einfacher ist, ein Schadprogramm mit demselben Namen wie Standardbefehle auszuführen, indem es einfach im aktuellen Verzeichnis abgelegt wird.
Wenn Sie $ PATH unverändert lassen, wenn $ GZIP_BINDIR auf NULL (leer) gesetzt ist, ist die Syntax korrekt ${GZIP_BINDIR-'/bin:'}$PATH; export PATH
Um $ PATH unverändert zu lassen, wenn $ GZIP_BINDIR entweder nicht gesetzt oder aber NULL gesetzt ist, wäre die korrekte Syntax ${GZIP_BINDIR:-'/bin:'}$PATH; export PATH
Dieser Befehl aktualisiert die Variable PATH.
Dies PATH
ist eine Umgebungsvariable, die eine Reihe von Verzeichnissen angibt, in denen sich ausführbare Programme befinden.
PATH="${GZIP_BINDIR-'/bin'}:$PATH";
Dies fügt den Wert einer anderen Variablen hinzu, GZIP_BINDIR
wenn der vorherige Pfad verlassen wird. Verwenden Sie stattdessen / bin und fügen Sie ihn dem Pfad hinzu
export PATH
Mit export wird der Pfad festgelegt, der für alle untergeordneten Prozesse und Subshells verfügbar ist. Lesen Sie dies, um weitere Informationen zu erhalten
Sie müssen beachten, dass dies nicht statisch ist und Sie es verlieren werden, sobald Sie Ihre Shell verlassen.
Um diese PATH-Bearbeitung dauerhaft zu machen, müssen Sie diese Zeilen an Ihre anhängen .bashrc
gedit .bashrc
und füge die Zeile hinzu
export PATH="${GZIP_BINDIR-'/bin'}:$PATH"
Führen Sie dann den Befehl aus
source .bashrc
:
in${GZIP_BINDIR-'/bin'}
“ Nicht unbedingt.${parameter-word}
ist auch gültig, scheint aber nicht in der Manpage zu sein.