.profile im Bash-Shell-Skript neu laden (unter Unix)?
-
17-09-2020 - |
Frage
Ich bin neu im Bash-Shell-Scripting und bin auf eine Herausforderung gestoßen.Ich weiß, dass ich meine „.profile“-Datei neu laden kann, indem ich einfach Folgendes tue:
. .profile
aber ich versuche, dasselbe in einem Bash-Skript auszuführen, das ich schreibe, und es funktioniert einfach nicht.Irgendwelche Ideen?Gibt es noch etwas, das ich zur Klärung beitragen kann?
Danke
Lösung
Versuchen Sie, diese aktuelle Shell neu zu laden:
generasacodicetagpre.Andere Tipps
Versuchen Sie das:
generasacodicetagpre.Beim Versuch, die ~/.profile-Datei neu zu laden/auszulesen, treten einige Probleme auf.[Dies bezieht sich auf Ubuntu Linux – in einigen Fällen können die Details der Befehle unterschiedlich sein]
- Führen Sie dies direkt im Terminal oder in einem Skript aus?
- Wie führt man das in einem Skript aus?
Anzeige.1)
Wenn Sie dies direkt im Terminal ausführen, wird keine Subshell erstellt.Sie können also zwei Befehle verwenden:
source ~/.bash_profile
oder
. ~/.bash_profile
In beiden Fällen wird dadurch die Umgebung mit dem Inhalt der .profile-Datei aktualisiert.
Anzeige 2) Sie können jedes Bash-Skript entweder durch Aufrufen starten
sh myscript.sh
oder
. myscript.sh
Im ersten Fall wird dadurch eine Subshell erstellt, die sich nicht auf die Umgebungsvariablen Ihres Systems auswirkt und diese nur für den Subshell-Prozess sichtbar sind.Nach Abschluss des Subshell-Befehls erfolgt keiner der Exporte usw.wird nicht angewendet.Dies ist ein häufiger Fehler und führt dazu, dass viele Entwickler viel Zeit verlieren.
Damit Ihre in Ihrem Skript vorgenommenen Änderungen für die globale Umgebung wirksam werden, muss das Skript ausgeführt werden
.myscript.sh
Befehl.
Um sicherzustellen, dass Ihr Skript nicht in einem Subshel ausgeführt wird, können Sie diese Funktion verwenden.(Auch hier gilt das Beispiel für die Ubuntu-Shell)
#/bin/bash
preventSubshell(){
if [[ $_ != $0 ]]
then
echo "Script is being sourced"
else
echo "Script is a subshell - please run the script by invoking . script.sh command";
exit 1;
fi
}
Ich hoffe, dass dies einige der häufigsten Missverständnisse ausräumt!:D Viel Glück!
Das Bash-Skript läuft in einer separaten Unterseite.Um diese Arbeit vorzunehmen, müssen Sie dieses andere Skript auch selben.
Versuchen Sie:
generasacodicetagpre.