Answers:
这是因为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。将每个bash会话视为独立的(它们在很大程度上是独立的)。通常,您不希望在一个变量中定义的变量污染另一个变量的环境。对于必要的情况,请使用export
。
.bashrc
吗?我的猜测是你没有export
荷兰国际集团:export HADOOP_HOME=/home/me/dist/hadoop
,当您运行/tmp
sample.sh`(其中产生一个新的bash
一个新的环境)HADOOP_HOME是不是在新的环境。