Auf Umgebungsvariablen kann im Bash-Skript nicht zugegriffen werden


22

Ich bin auf ein komisches Problem gestoßen. Ich habe einige env-Variablen in .bashrcund es funktioniert wie es sollte:

echo $HADOOP_HOME
/home/me/dist/hadoop

Auf die Variable env kann jedoch nicht zugegriffen werden, wenn Bash-Skripte ausgeführt werden. Angenommen, ich erstelle /tmp/sample.shmit folgendem Inhalt:

#! /bin/bash
echo $HADOOP_HOME

Wenn ich das obige Skript ausführe, wird eine leere Zeile angezeigt:

/tmp/sample.sh
   

1
Können Sie den relevanten Teil von Ihrem zeigen .bashrc? Ich vermute , dass Sie Folgendes nicht tun export: export HADOOP_HOME=/home/me/dist/hadoopWenn Sie /tmpsample.sh ausführen (was ein neues bashmit einer neuen Umgebung erzeugt), befindet sich HADOOP_HOME nicht in der neuen Umgebung.
John N

Antworten:


29

Das liegt daran, dass die HADOOP_HOMEVariable nicht exportiert wird:

$ cat foo.sh
#!/bin/bash
echo "HADOOP_HOME: $HADOOP_HOME"


$ HADOOP_HOME=/home/me/dist/hadoop
$ echo $HADOOP_HOME
/home/me/dist/hadoop

$ foo.sh
HADOOP_HOME: 

$ export HADOOP_HOME
$ foo.sh
HADOOP_HOME: /home/me/dist/hadoop

Wenn Sie ein Shell-Skript ausführen, wird dieses Skript in einer eigenen Bash-Instanz ausgeführt (das ist, was das #!/bin/bashtut), die eine untergeordnete Shell der aktuellen ist. Variablen werden standardmäßig nur dann nicht an untergeordnete Shells übergeben, wenn sie exportiert werden. Stellen Sie sich jede Bash-Sitzung als unabhängig vor (sie sind es größtenteils). Normalerweise möchten Sie nicht, dass in einer Variablen definierte Variablen die Umgebung einer anderen verschmutzen. In den Fällen, in denen dies erforderlich ist, verwenden Sie export.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.