我有一个简单的 bash 脚本:
#!/bin/bash
JAVA_HOME=/usr
EC2_HOME=~/ec2-api
echo $EC2_HOME
export PATH=$PATH:$EC2_HOME/bin
Run Code Online (Sandbox Code Playgroud)
我像这样运行脚本
$ ./ec2
/Users/user/ec2-api
Run Code Online (Sandbox Code Playgroud)
该脚本运行并产生正确的输出。
但是,当我现在尝试访问 EC2_HOME 变量时,我什么也没得到:
$ echo $EC2_HOME
Run Code Online (Sandbox Code Playgroud)
我得到一个空字符串。我究竟做错了什么?
请执行以下任一操作:
source ec2
Run Code Online (Sandbox Code Playgroud)
或者
. ec2
Run Code Online (Sandbox Code Playgroud)
(请注意,.符号只是 的快捷方式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 中使用的任何变量,不需要导出它们。)| 归档时间: |
|
| 查看次数: |
2808 次 |
| 最近记录: |