BASH脚本设置环境变量不起作用

我已经编写了以下脚本来在需要时设置一些环境变量。

#!/bin/sh export BASE=/home/develop/trees echo $BASE export PATH=$PATH:$BASE echo $PATH 

在命令下面,我可以在终端上看到结果:脚本运行,但最后没有设置变量。

 ~$: ./script.sh /home/develop/trees /bin:......:/home/develop/trees ~$: echo $BASE ~$: 

怎么了? 提前致谢。 米尔科

export将变量赋值export到运行export命令的shell的子进程。 您的命令行环境是脚本shell的父级 ,因此它不会看到变量赋值。

你可以使用. (或source )bash命令在当前shell环境中执行脚本命令并实现您想要的function,例如

 source ./script.sh echo "$BASE" 

会生产

 /home/develop/trees 

source命令(通常在脚本中看到)是bash的同义词. ,这是POSIX标准的一部分(例如,在破折号中可用,但source不是)。

 . ./script.sh # identical to "source ./script.sh" 

. script.shsource script.sh将首先在PATH查找script.sh ,因此指定script.sh的路径更安全。)

运行脚本时,它在子shell中运行。 变量仅在该子shell的上下文中有效。 将它们设置在.bashrc.profile并读取变量和子shell 。 export语句按照你的例子中的方式(当前shell及其所有子shell)进行操作。

或者(如果您真的希望脚本能够影响当前shell的环境),请将其运行为:

 . ./script.sh 

这导致它在您当前的shell中运行,但也不会在层次结构中传递变量。

我经常想要设置一个没有麻烦的环境变量。

以下是我添加到.bashrc中以实现此便利性的内容。

 defect() { if [ $1 ] && [ -z $2 ] then eval 'export DEFECT=$1' return 0 else echo 'Usage: defect {number}' return 1 fi } 

你可以尝试这样的事情

 CURRENT_DIR=`pwd` echo "SOME_PATH is pointing to ${CURRENT_DIR}" #Export SOME_PATH for current working directory export SOME_PATH=${CURRENT_DIR}