bash - 如何使用 Shell 脚本在 mac 中覆盖环境变量

我有一组环境变量,需要根据 shell 脚本中指定的参数进行设置。 但问题是那些变量已经在 bash 配置文件中定义了 例如:

bash_profile 有一个名为“KARAN”的变量: 导出 KARAN=/config/1

现在运行 shell 脚本,这是它应该做的: export KARAN=/config/2(将 bash 配置文件的 KARAN 值更改为 2)

最佳答案

你的问题不清楚。如果您的脚本需要将环境变量设置为特定值,只需使用 export VAR=val 即可。我认为您要问的是如何让脚本修改当前 shell 的环境。如果没有两个 shell 的合作,这是不可能的。那是因为环境变量是由子进程继承的。但是子进程不能直接修改其父进程(或与此相关的其他随机进程)的环境。为此,两个进程必须协调数据交换。如果子进程是 shell 脚本,这通常通过使用 source 命令来完成。或者让子进程将一系列 export 语句写入标准输出,然后让父 shell 捕获并执行这些语句。例如,假设我有一个名为 set_env 的脚本,如下所示

#!/bin/sh
echo export KARAN=/config_2
echo export VAR2=val2

然后当前的 shell 会做

eval $(set_env)

但是请注意,eval 是危险的。我更喜欢这样做稍微安全一些:

set_env | source /dev/stdin

然而,这只适用于 ksh 和 zsh 这样的 shell。由于 bash 处理管道的方式,source 实际上在子 shell 中执行,因此不会在当前 shell 中设置变量。

https://stackoverflow.com/questions/58203164/

相关文章:

javascript - 使用 React Hook 应用多个 Context 的好方法

selenium - 登录网站时如何使用 puppeteer/selenium 重用保存的凭据/密码

apache-spark - 在 Spark 2.4.0 中使用 spark.sql 的 Hive

visual-studio-code - Prettier 在 React Code 中不工作并在状

node.js - nodemailer 不发送邮件,给出 250 ok

python - 如何在 keras 中训练顺序模型,给出一个列表作为输出和输入?

java - 创建名为“kafkaListenerContainerFactory”的 bean 时

wordpress - 您无权查看此页面 : JWT Authentication for WP R

flutter - 如何使用我的整个应用程序在 TabBarView 中创建可滚动的内容?

reactjs - Jest 性能问题