为什么可以';我是否通过从Npm脚本运行BASH脚本来设置环境变量?

为什么可以';我是否通过从Npm脚本运行BASH脚本来设置环境变量?,bash,npm,npm-scripts,Bash,Npm,Npm Scripts,我有一个NodeJSJavaScript项目,但我想在本地设置一组环境变量。创建了一个仅导出一些变量的bash文件: #!/usr/bin/env bash export waka=flaka export fat=booty 当我从命令行使用点来源代码和运行文件时,它工作正常: . ./env.sh 我可以看到变量已经设置好了 echo $waka # prints "flaka" 但是,我尝试接受这个命令,并通过将其添加到我的package.json中,使其成为npm脚本 scri

我有一个NodeJSJavaScript项目,但我想在本地设置一组环境变量。创建了一个仅导出一些变量的bash文件:

#!/usr/bin/env bash

export waka=flaka
export fat=booty
当我从命令行使用点来源代码和运行文件时,它工作正常:

. ./env.sh
我可以看到变量已经设置好了

echo $waka  # prints "flaka"
但是,我尝试接受这个命令,并通过将其添加到我的package.json中,使其成为npm脚本

scripts: {
  "set-env": ". ./env.sh",
  ...
 }
然后运行它:

npm run set-env
脚本已运行,但环境变量未保存:

echo $waka  # prints undefined (assuming you didn't already run it from command line)

因此,我想知道为什么它不将环境变量保存为npm脚本,以及是否可以从npm脚本运行bash脚本,以便在命令提示符会话的其余部分保存环境变量。谢谢

npm
不是shell命令;它在一个单独的进程中运行,该进程派生另一个shell以运行
set env
指定的命令
env.sh
被执行,但该shell立即退出,此时更改消失(然后
npm
本身退出)。

谢谢,但您确定它不可能影响当前shell进程吗?是;这是一个基本概念,即进程的环境不能由其子进程之一修改。