Meh*_*ban 31 command-line bash scripts environment-variables
我遇到了一个奇怪的问题。我将一些 env 变量放入其中.bashrc,它可以正常工作:
echo $HADOOP_HOME
/home/me/dist/hadoop
Run Code Online (Sandbox Code Playgroud)
但是在执行 bash 脚本时无法访问 env 变量。假设我/tmp/sample.sh使用以下内容创建:
#! /bin/bash
echo $HADOOP_HOME
Run Code Online (Sandbox Code Playgroud)
当我运行上面的脚本时,回显一个空行:
/tmp/sample.sh
?
Run Code Online (Sandbox Code Playgroud)
ter*_*don 43
那是因为HADOOP_HOME变量没有被导出:
$ 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
Run Code Online (Sandbox Code Playgroud)
当您运行一个 shell 脚本时,该脚本将在它自己的 bash 实例中运行(这就是它的#!/bin/bash作用),它是当前一个的子 shell。默认情况下,变量不会传递给子 shell,仅当它们被导出时。将每个 bash 会话视为独立的(它们在很大程度上是独立的)。您通常不希望一个定义的变量污染另一个的环境。对于那些必要的情况,请使用export.