Ich habe meine "HOME" -Variable geändert und kann jetzt "~ / .bash_profile" nicht finden, um sie zurück zu ändern

15

Ich habe mit Umgebungsvariablen auf meinem Mac herumgespielt und versucht, zu lernen, wie man sie verwendet. nano ~/.bash_profileDann habe ich den Befehl verwendet und die Zeile hinzugefügt HOME=/Users/MyCompName/Desktop, um meine Ausgangsvariable zu aktualisieren.

Diese Änderung hat funktioniert und kann gesehen werden, wenn ich printenvalle Umgebungsvariablen ansehe, aber als ich HOMEzurückkam, schien ich sie nicht ~/.bash_profilemehr zu finden . Wo ist es hin?

Matt
quelle
9
Grundsätzlich ~bedeutet$HOME
el.pescado
6
... also, wenn Sie neu definieren $HOME, ~wird auch neu definiert
el.pescado

Antworten:

32

Es ist am selben Ort.

Bevor sich die Änderung ~auf so etwas wie erweitert /Users/YourUserName, findet die Shell Ihre .bash_profiledort. Nachdem die Datei bezogen wurde, wird sie ~auf einen anderen Pfad erweitert, sodass sie ~/.bash_profilenicht mehr auf die relevante Datei verweist. Das liegt daran, dass in diesem Zusammenhang ~bedeutet $HOME.

Wenn Sie den vollständigen Pfad zu Ihrem tatsächlichen Basisverzeichnis kennen, können Sie ihn anstelle von verwenden ~. In Mac würde es wahrscheinlich so aussehen:

nano /Users/YourUserName/.bash_profile

Oder lassen Sie Ihre Bash Ihr Home-Verzeichnis in der Benutzerdatenbank nachschlagen, anstatt nur nachzuschauen $HOME. Dafür müssen Sie sich an nichts erinnern:

nano ~YourUserName/.bash_profile

Es HOMEist nicht die beste Idee, Ihre Variable zu ändern, ohne Ihr tatsächliches Basisverzeichnis zu ändern. Das Ändern des Home-Verzeichnisses eines Benutzers ist eine administrative Aufgabe. Normalerweise können normale Benutzer dies nicht.

Kamil Maciorowski
quelle
Super, ich konnte es wieder finden, danke! Würde es Ihnen etwas ausmachen, näher auf das einzugehen, was Sie mit "nachdem die Datei bezogen wurde" meinen? Mir ist nicht bekannt, was es bedeutet, eine Datei zu beziehen
Matt
6
@Matt .bash_profilehat eine Form eines Bash-Skripts. Sie können ein Skript ausführen oder es als Quelle verwenden. Laufen heißt, eine Subshell zu erstellen und das Skript dort zeilenweise auszuführen. Sourcing bedeutet, das Skript in der aktuellen Shell auszuführen . Einige Aufgaben, die sich auf die aktuelle Shell auswirken sollen, können nicht in einer Subshell ausgeführt werden. Das Ändern einer Variablen für die aktuelle Shell ist eine davon. Aus diesem Grund werden einige Dateien nicht in einer Subshell ausgeführt, sondern als Quellen angegeben. Verwenden Sie zum manuellen Quellen einer Datei . file( .wird von POSIX angegeben) oder source file( sourceist eine Nicht-POSIX-Erweiterung, die von wenigen Shells verstanden wird).
Kamil Maciorowski
2
Wenn Sie (Matt) nicht wissen, wo sich Ihr Ausgangsverzeichnis befand, können Sie es nano ~YourUserName/.bash_profilestattdessen verwenden. Dadurch wird Ihr Ausgangsverzeichnis in der Benutzerdatenbank nachgeschlagen und nicht nur $ HOME.
Stig Hemmer
1
@StigHemmer Die Antwort ist jetzt Community-Wiki. Ihr nützlicher Kommentar wurde aufgenommen. Vielen Dank.
Kamil Maciorowski