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


22

我遇到一个奇怪的问题。我放入了一些env变量.bashrc,它可以正常工作:

echo $HADOOP_HOME
/home/me/dist/hadoop

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

#! /bin/bash
echo $HADOOP_HOME

当我在脚本上运行时,回显一个空行:

/tmp/sample.sh
   

1
您可以显示您的相关部分.bashrc吗?我的猜测是你没有export荷兰国际集团:export HADOOP_HOME=/home/me/dist/hadoop,当您运行/tmpsample.sh`(其中产生一个新的bash一个新的环境)HADOOP_HOME是不是在新的环境。
约翰N

Answers:


29

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.