我遇到了一个奇怪的问题。我输入了一些环境变量.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
。