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 bashParametererweiterungsmuster. 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_BINDIRzuvor ein Wert festgelegt wurde (außer Null, da Sie ihn nicht verwenden :), wird dieser Wert verwendet, andernfalls /binwird 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 $PATHwird das auf die Werte erweitert, die es zuvor gehalten hat. Also, wenn PATHzuvor:
/usr/sbin:/usr/bin
Nun wird dein PATHWille (sofern GZIP_BINDIRnicht festgelegt):
/bin:/usr/sbin:/usr/bin
export PATHstellt dies PATHallen 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. "
PATHund exportin 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 PATHist 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_BINDIRwenn 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.