我有一个简单的bash脚本:
#!/bin/bash
JAVA_HOME=/usr
EC2_HOME=~/ec2-api
echo $EC2_HOME
export PATH=$PATH:$EC2_HOME/bin
我像这样运行脚本
$ ./ec2
/Users/user/ec2-api
脚本运行并生成正确的输出。
但是,当我现在尝试访问EC2_HOME变量时,我什么都没得到:
$ echo $EC2_HOME
我得到一个空白的字符串。我做错了什么?
答案 0 :(得分:4)
请执行以下任一操作:
source ec2
或
. ec2
(请注意.
符号只是source
)
<强>解释强>
./ec2
实际上从当前shell生成一个子shell来执行脚本,子shell不会影响它所生成的父shell的环境。EC2_HOME
确实在子shell中正确设置为/Users/user/ec2-api
(类似地,PATH
环境变量也在子shell中正确更新和导出),但这些更改赢了不会传播回你的父shell。 source
直接在当前shell中运行脚本而不生成子shell,因此所做的更改将保持不变。export
的注释:export用于告诉从当前shell生成的新shell使用从当前shell导出的变量。因此,对于您只在当前shell中使用的任何变量,它们需要不能出口。)答案 1 :(得分:0)
shell脚本永远不能修改其父级的环境。 要解决您的问题,您可以使用点(。)命令:
$ . ./ec2
这应该有效。在cshell中,它将是
% source ./ec2
要了解有关shell和脚本的更多信息,我的最佳资源是Unix power tools。