Ich habe mehrere Amazon EC2-Konten und möchte schnell in der Lage sein, Variablen zu wechseln, z. B. $EC2_HOME
mithilfe eines Skripts.
Ich habe ein Shell-Skript wie folgt eingerichtet:
#!/bin/sh
export EC2_HOME=/home/me/.ec2
echo $EC2_HOME
Wenn ich das Skript ausführe, weiß ich, dass EC2_HOME
das festgelegt ist, aber ich dachte, dass export
die Variable durch die Verwendung von " hängen bleiben" würde, nachdem das Skript abgeschlossen wurde. Es funktioniert nicht, da beim Laufen echo $EC_HOME
nichts angezeigt wird.
Ich weiß, dass dies sehr rudimentäre Linux-Skriptkenntnisse sein müssen, aber ich weiß es nicht. Ich habe ohne Glück versucht, nach ähnlichen Fragen zu suchen. Ich entschuldige mich, wenn dies ein Duplikat ist.
.
odersource
keinen neuen untergeordneten Prozess erzeugen, führen Sie die Befehle in der aktuellen Shell aus..
odersource
. Warum passiert dies ?exit
Aussage, daher ist es nicht geeignet, eine Quelle zu haben.source ./script
funktioniert ganz gut,sudo source ./script.sh
sagtsudo: source: command not found
. Wie kann ich das mit sudo machen?sudo
und den Konfigurationseinstellungen in können/etc/sudoers
Sie Ihre Umgebung nicht erhalten, wenn Sie Befehle mit ausführensudo
. Ich empfehle Ihnen, Ihr Skript als Quelle zu verwenden und dannsudo
mit der-E
Option auszuführen , um die Umgebung zu schonen. Wenn es nicht funktioniert, gibt es vermutlich sehr wenig, was Sie tun können.Wenn Sie ein Skript ausführen, erhält es eine eigene Shell und eine eigene Umgebung, die wieder verschwinden, sobald das Skript beendet ist. Um die Umgebungsvariablen beizubehalten, geben Sie das Skript in Ihre aktuelle Shell ein:
oder gleichwertig (aber etwas portabler) den POSIX-Punktbefehl verwenden :
Anschließend werden die Definitionen in die aktuelle Shell-Umgebung eingefügt und von allen Programmen übernommen, die Sie von dort aus starten.
Um dem Ausführen eines Skripts näher zu sein,
. a.sh
wird a.sh durch Durchsuchen der Verzeichnisse in derPATH
Umgebungsvariablen gefunden.Es gibt einige Feinheiten, wie diese sich verhalten, und ob
.
undsource
sind die gleichen (oder haupt vorhanden).. ./a.sh
wird sich auf jeden Fall in jeder POSIX-kompatiblen Shell gleich verhalten, abersource
und.
und. a.sh
und. ./a.sh
können variieren. Für Bashsource
und.
sind gleich in allen Fällen; Bei zsh wirdsource
immer zuerst das aktuelle Verzeichnis überprüft . ksh ist im Wesentlichen ähnlich.Wenn der Skriptname als Pfad angegeben wird (der ein enthält
/
), wird dieser Pfad in allen Fällen direkt verwendet. Das tragbarste, was man tun kann, ist. ./script
oder. /path/to/script
.quelle
Nur zur Kenntnisnahme.
Wenn Sie ein Skript aus dem Internet ausführen möchten, das env in das System exportiert
Sie können folgendes Format verwenden
Zum Beispiel:
quelle