Ich bin sehr neu in Linux und füge den folgenden Befehl am Ende der Datei .profile
in meinen Home-Ordner ein:
export PATH="~/.composer/vendor/bin:$PATH"
Ich kenne die Probleme mit Umgebungsvariablen und deren Werten ein wenig aus Windows, aber in diesem Fall möchte ich verstehen, was dieser Befehl bewirkt und welche Teile er umfasst:
Was ist diese "Export" -Phrase am Anfang? Exportiert es die Daten, um für Bash verfügbar zu sein?
Was ist die erste
PATH
und was ist die zweite$PATH
und warum brauchen wir zwei?
command-line
bash
environment-variables
JohnDoea
quelle
quelle
export
Befehl verwenden oder nicht , da diePATH
Variable bereits als exportiert markiert ist. (Versuchen Sie es in beide Richtungen, wenn Sie mir nicht glauben!)Antworten:
export
ist ein Befehl (genauer gesagt, es ist ein in Bash integrierter Befehl , dh es ist keine ausführbare DateiPATH
, sondern ein von Bash selbst integrierter Befehl).export
Setzt die Umgebungsvariable auf der linken Seite der Zuweisung auf den Wert auf der rechten Seite der Zuweisung. Eine solche Umgebungsvariable ist für den Prozess, der sie festlegt, und für alle Unterprozesse in derselben Umgebung sichtbar, dh in diesem Fall für die Bash-Instanz, die die Quelle ist,~/.profile
und für alle Unterprozesse in derselben Umgebung (zu denen z. B. auch andere Shells gehören können) , auf die wiederum zugegriffen werden kann).Die erste,
PATH
wie oben erläutert, ist die Umgebungsvariable, die mit festgelegt werden sollexport
.Da
PATH
normalerweise etwas enthalten ist, wenn~/.profile
es von einer Quelle stammt (standardmäßig enthält es/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
), können Sie einfach festlegenPATH
,~/.composer/vendor/bin
dass makePATH
nur enthält~/.composer/vendor/bin
.Da also Verweise auf eine Variable in einem Befehl durch den Wert der Variablen durch Bash zum Zeitpunkt der Auswertung des Befehls ersetzt (oder "erweitert" werden) ,
:$PATH
werden sie an das Ende des Werts gesetzt, dem sie zugewiesen werden sollen,PATH
so dassPATH
sie~/.composer/vendor/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
( dh wasPATH
enthält schon plus~/.composer/vendor/bin:
am anfang).quelle
https://help.ubuntu.com/community/EnvironmentVariables wird Ihnen wahrscheinlich helfen. Auch
man bash
kann sehr hilfreich sein , mit dem Verständnis , wie das funktioniert (zumindest in Bash)Wie auch immer - wie für
PATH=
Sie im Grunde genommen diePATH
Variable festlegen, einige neue Pfade zum Durchsuchen hinzufügen und am Ende bereits festgelegte / zuvor festgelegte Pfade hinzufügen$PATH
(was im Grunde genommen eine Referenz auf diePATH
Variable ist).Angenommen, Sie
PATH
waren bisher auf Folgendes eingestellt:und dann setzt du
Ihre
PATH
danach wird wie folgt sein:Ich hoffe das ergibt Sinn.
Außerdem exportieren Sie die neue Variable, damit sie in Ihrer Umgebung bekannt ist, einschließlich der untergeordneten Prozesse / Subshells.
Beachten Sie bitte auch, dass die Reihenfolge der Verzeichnisse
PATH
wichtig sein kann. Und so etwasPATH="$PATH:a:b:c"
gibt dir das Ergebnis:Dies wirkt sich auf die Reihenfolge der Verzeichnisse / Pfade bei der Suche nach einem Befehl aus (wenn Sie Ihren Befehl in mehr als einem der Verzeichnisse haben, wird der zuerst gefundene verwendet - was manchmal zu unerwarteten Ergebnissen führen kann).
quelle
Hier ist der Befehl, damit jeder mitmachen kann, während er die Aufzählungspunkte durchläuft.
export PATH="~/.composer/vendor/bin:$PATH"
export
Der eingebaute/bin/export
Shell-Befehl (das heißt, es gibt keinen , es ist eine Shell-Sache) macht Umgebungsvariablen für andere aufgerufene Programmebash
(siehe die verknüpfte Frage in Extra Reading) und die Subshells verfügbar.PATH
später in einer Variablen gespeichert .$PATH
ist die StandardzuweisungPATH
(oder zumindest, wie die Variable aussieht, bis dieser Befehl in Ihrem.bashrc
oder erscheint.profile
), und erweitern Sie sie.~/.composer/vendor/bin
wird erweitert/home/username/.composer/vendor/bin
, wo der.composer
Ordner aufgrund des führenden Punktes versteckt ist.~/.composer/vendor/bin:$PATH
haben sich jetzt in eine lange Liste von Ordnern verwandelt, getrennt durch:
. Alles ist in doppelte Anführungszeichen eingeschlossen, sodass wir Ordner mit Leerzeichen in ihren Pfad aufnehmen.PATH
Variablen gespeichert und externe Befehle dürfen es verwendenEinfaches Beispiel
Meine interaktive Shell ist eigentlich
mksh
, die zufällig auchexport
eingebaut hat. Mitexport
setVAR
kann meine Variable an eine nachfolgende Kette von Befehlen / Unterprozessen übergeben und von diesen verwendet werden. Dort habe ich dieselbe Variable exportiertZusätzliches Lesen
quelle
~
In~/.composer/vendor/bin
wird nicht erweitert! Die Tilde wird nur an wenigen Stellen erweitert, etwa direkt nach dem=
Schild.PATH="~/.foo:$PATH"
Ergebnisse in~/.foo:/other/path/dirs...
. Aber~
würde erweitert werdenPATH=~"/.foo:$PATH"
in, die Ergebnisse/home/user/.foo:/other/path/dirs...
.Ich habe hier und an anderen Stellen im Internet gelesen, mit einem Freund darüber gesprochen und beschlossen, dass ich als Neuling (vielleicht eher ein Ubuntu-Neuling als manche hier) diesen Befehl abbilden sollte - ich sollte eine Map erstellen und So lernst du, worum es geht und wo du dich befindest:
Vorläufige Daten
Wenn Sie im Moment etwas in diesem Kapitel nicht verstanden haben - keine Sorge, es wird klarer, wenn Sie weiterlesen. Um diese Angelegenheit zu verstehen, müssen Sie jedoch Umgebungsvariablen (EVs), ihre Werte und ihren Zweck lesen . Ich werde nun versuchen, den Befehl in einfachen Worten und in einer Mapping-Methode für Neulinge wie mich und nur für Neulinge zu erklären. Versucht mein Bestes zu geben ...
Kartierung
Der ursprüngliche Wert des EV "PATH", wie er in Ubuntu 15.10 enthalten ist, ist:
Im Befehl selbst haben wir zwei PATH-Phrasen. Der letzte ist $ PATH - Der $ sagt "drucke den ursprünglichen Wert oder die Werte des EV neben dir"; Das EV daneben ist das PATH EV.
Wir haben die Pfadvariable selbst exportiert (sie wurde auch für Unterprozesse verfügbar gemacht, dh für IE-Prozesse, die in der CLI ausgeführt werden, die eigentlich nicht die Bash-Shell sind, sondern in der CLI ausgeführt werden (z. B. Drush , die Drupal- CLI).
Neben dem Export haben wir ihn auch erweitert: Mit der ersten PATH-Phrase (PATH =) haben wir dem ursprünglichen Wert (dargestellt durch $ PATH) einen zusätzlichen Wert (~ / .composer / vendor / bin :) hinzugefügt.
Der Doppelpunkt (:) am Ende des neuen Werts, den ich oben erwähnt habe, dient dazu, den neuen Wert vom ursprünglichen Wert zu unterscheiden.
Das "" ist der Bereich, in dem sich der Wert / die Werte befinden.
Das ~ ist der Home-Ordner.
Ich hoffe, dass der Befehl nach dieser Zuordnung für Neulinge wie mich klarer wird.
quelle
Der
export
Befehl stellt Variablen in Unterschalen zur Verfügung. Das heißt, ohne siePATH
wäre die Variable in Subshells nicht sichtbar.PATH
wird zweimal erwähnt:=
Vorzeichen zugewiesen .=
Vorzeichen ersetzt wird. Dadurch wird der alte Wert Teil des neuen Werts.quelle
PATH
wäre die Variable in Subshells nicht sichtbar." Das ist falsch; DaPATH
es sich um eine Umgebungsvariable handelt (die nicht mit einer Shell- Variablen identisch ist ), wird sie automatisch exportiert, und derexport
Befehl ist nicht erforderlich.setenv
Befehl nicht einmal .PATH
aus der Umgebung stammt, wird es automatisch exportiert, sodass Sie keineexport
Änderungen vornehmen müssen, um sie auf untergeordnete Prozesse zu übertragen (im Gegensatz zu der von Ihnen verlinkten Seite).PATH=foo
undexport PATH=foo
haben das gleiche Verhalten.die
export
eine buildin Befehl bas ist, bedeutet exportieren Variablen envirement variabel sein. (Sie könnten tippen,help export
um mehr zu lernen(Die Zeichen, die dem Befehl folgen, sind durch Leerzeichen aufgeteilte Parameter. In diesem Fall gibt es also nur einen Parameter.)
das
PATH
ist der Name der Variablen, in der Regel, vordefinierte Varibale von bash, in Großbuchstaben benannt werden.Das
=
Mittel weist dieser Variablen einen Wert zu.Die gesamte Zeichenfolge ist der Wert der Variable
das
$PATH
ist eine Art von funciton von bash, mit dem Namenvariable expantion
, bash den Wert des exist ersetzen wirdPATH
im Parameter - String, bevor die Zeichenfolge sendenexport
BefehlDie
:
Variable in einem Sonderzeichen in PATH wird von allen Anwendungen verstanden, die diese Variable verwenden möchten. es bedeutet Trenner. Sie haben also viele Verzeichnisse in der PATH-Variablen.quelle