gpt4 book ai didi

bash - 为什么 bash 脚本变量不保存?

转载 作者:行者123 更新时间:2023-12-02 22:23:03 25 4
gpt4 key购买 nike

我有一个简单的 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

我得到一个空白字符串。我做错了什么?

最佳答案

改为执行以下任一操作:

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 中使用,它们不需要导出。)

关于bash - 为什么 bash 脚本变量不保存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13404334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com