是否可以使 Bash“source”命令保留手动传入的环境变量?

Leo*_*ang 9 linux bash

我有一个.env包含环境变量的文件,例如:

TZ=UTC
NODE_ENV=development
Run Code Online (Sandbox Code Playgroud)

然后,在我的 Bash 脚本中,我使用:

set -o allexport; source .env; set +o allexport
Run Code Online (Sandbox Code Playgroud)

这会加载所有环境变量.env

但是,如果我手动将环境变量传递给脚本,它们会被source. 例如,如果我运行NODE_ENV=production ./script.sh,我希望它保留NODE_ENV=production而不是使用NODE_ENV=developmentfrom .env。我怎么能这样做呢?

我正在使用 Ubuntu 20

Kam*_*Cuk 13

存储环境“供以后使用”,获取文件,然后恢复环境。

curenv=$(declare -p -x)
source .env
eval "$curenv"
Run Code Online (Sandbox Code Playgroud)


ogu*_*ail 5

我不认为是这样。但您可以按如下方式修改 .env 文件以防止其覆盖NODE_ENV

TZ=UTC
NODE_ENV=${NODE_ENV:-development}
Run Code Online (Sandbox Code Playgroud)