2016-08-05 5 views
0

Ich habe ein Skript erstellt, um Terraform auf meinen Server herunterzuladen und zu installieren.Exportieren einer Pfadvariablen in einem Shell-Skript

#!/bin/bash 

wget https://releases.hashicorp.com/terraform/0.7.0/terraform_0.7.0_linux_amd64.zip 

unzip terraform_0.7.0_linux_amd64.zip 

echo "export PATH=$PATH:/root/terraform_dir" >> /root/.bash_profile 

source /root/.bash_profile 

terraform --version 

Dieser Code funktioniert einwandfrei. Aber sobald das Skript abgeschlossen ist und kommt, ist die .bash_profile Datei wieder in ihrem ursprünglichen Zustand. die Pfadvariable wird nicht aktualisiert.

echo $PATH 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin 

wenn ich terraform --version außerhalb des Shell-Skript gebe es nicht gut funktioniert. Wenn ich su - gebe und dann terraform --version versuche, funktioniert es gut.

Gibt es irgendwelche Arbeit dafür oder automatisiertes Skript für die Aktualisierung der .bash_profile. Ich möchte meine Sitzung nicht jedes Mal neu starten, wenn ich die .bash_profile aktualisiere?

+0

Sie sagen, dass es nicht funktioniert hat, wenn Sie nicht als root sind, aber es ist, wenn Sie als root angemeldet sind? Weil das durch das Profil, das du bearbeitet hast, ziemlich offensichtlich ist. – ydaetskcoR

+0

In welcher Umgebung starten Sie Ihr Skript? Ist es root-only? Nicht in einem Cron-Job? Fängst du es als normaler Benutzer an? Denken Sie daran, dass Sie bei '>>' immer die Export-Zeile in die Datei einfügen. – ferdy

+0

Funktioniert nicht, wenn ich nur als Root-Benutzer angemeldet bin. Nein, es ist kein Cron Job. Dieses Skript wird immer nur als Root-Benutzer ausgeführt. – sriramsm04

Antwort

0

Shellskripts werden in einer Subshell ausgeführt (die Sie in der ersten Zeile als #!/Bin/bash definieren). Jede Änderung in der Umgebung ist lokal für diese Subshell. Das Sourcing von bash_profile wirkt sich nur auf die Subshell aus.

Um die Befehle in der aktuellen Shell den Source-Befehl ausführen des Skripts in der aktuellen Schale (http://ss64.com/bash/source.html)

z.B. auszuführen statt

$ ./myscript.sh 

Lauf:

$ source ./myscript.sh 
+0

Danke ein Tonne Mann! Das hat funktioniert! – sriramsm04

+0

Glücklich zu helfen. Wenn dies Ihnen geholfen hat, bitte akzeptieren Sie die Antwort :) – Oliver

Verwandte Themen