Bash 脚本中无法访问环境变量

Bash 脚本中无法访问环境变量

我遇到了一个奇怪的问题。我输入了一些环境变量.bashrc,它正常工作:

echo $HADOOP_HOME
/home/me/dist/hadoop

但是在执行 bash 脚本时无法访问 env 变量。假设我创建/tmp/sample.sh以下内容:

#! /bin/bash
echo $HADOOP_HOME

当我运行上述脚本时,会出现一个空行:

/tmp/sample.sh

答案1

这是因为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

当您运行 shell 脚本时,该脚本将在其自己的 bash 实例中运行(这就是 所做的#!/bin/bash),该实例是当前 shell 的子 shell。默认情况下,变量不会传递给子 shell,除非它们被导出。将每个 bash 会话视为独立的(它们在很大程度上是独立的)。您通常不希望在一个会话中定义的变量污染另一个会话的环境。在必要的情况下,请使用export

相关内容