Warum läuft mein einfaches Bash-Skript nicht?

572
Mat

Ich schreibe gerade ein einfaches Bash-Skript für CentOS 6.2:

[root@hadoop1 ~]# vi bash_startup  #! /bin/bash export r=1 

Zurück zur Befehlszeile: und mit ./bash_startup ausführen

[root@hadoop1 ~]# echo $r  [root@hadoop1 ~]# 

Echo $rgibt mir kein Ergebnis, warum?

1
Was passiert in Ihrem Skript, wenn Sie `! / bin / bash` (was falsch ist) an `#! / bin / bash` was ist richtig? JakeGould vor 6 Jahren 0

1 Antwort auf die Frage

3
Joseph Sible

Änderungen an Umgebungsvariablen in einem Skript wirken sich nur auf die aufrufende Shell aus, wenn Sie das Skript wie folgt aufrufen:

. ./script.sh 

Oder:

source ./script.sh 

Nicht:

bash ./script.sh 

Oder:

./script.sh 

Dies liegt daran, dass die ersten beiden Methoden das Skript in der aktuellen Shell ausführen, während die letzten beiden eine Subshell starten und Umgebungsvariablenänderungen nicht aus Subshells nach oben übertragen werden.

Was ist mit dem `! / bin / bash`. Sollte es nicht ein `#! / Bin / bash` sein? Was Sie sagen, ist richtig, aber es scheint, als hätte dieses Skript einige Probleme. JakeGould vor 6 Jahren 0
@JakeGould Auch wenn das falsch ist, denke ich nicht, dass es für das Problem relevant ist, nach dem OP fragt. Joseph Sible vor 6 Jahren 1
Sehr relevant `! / bin / bash` führt `bash` aus und negiert seinen Exit-Status. Diese neue Hülle kann auf den ersten Blick nicht von der alten (Sourcing) Shell unterschieden werden. Das OP könnte denken, dass alles beschafft wurde und versuchen Sie 'echo $ r'. Es wird eine leere Zeile zurückgegeben, als ob Ihre Lösung nichts geändert hätte. `export r = 1` wird erst nach Verlassen der neuen Shell in die alte Shell übernommen. Kamil Maciorowski vor 6 Jahren 1
Ich verwende ./bash_startuo und korrigierte die bin-bash-Datei, bekomme aber immer noch keinen Wert für 'r'. Mat vor 6 Jahren 0
@Mat In der Antwort heißt es explizit, dass Sie die Datei generieren und nicht ausführen sollen. Kamil Maciorowski vor 6 Jahren 1
Was meinst du mit Beschaffung? Das Ausführen von 'bash ./bash_startup' gibt mir auch keine Ausgabe. Mat vor 6 Jahren 0
Sie haben genau die beiden Befehle ausprobiert, von denen ich sagte, dass sie nicht funktionieren. Joseph Sible vor 6 Jahren 1
danke gelöst Mat vor 6 Jahren 0