bash - 为什么我不能通过从 Npm 脚本运行 BASH 脚本来设置 Env 变量?

标签 bash npm npm-scripts

我有一个nodejs javascript项目,但是我想在本地设置一堆环境变量。创建了一个只导出一些变量的 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 脚本,以便为其余部分保存环境变量命令提示符 session 。谢谢!

最佳答案

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

关于bash - 为什么我不能通过从 Npm 脚本运行 BASH 脚本来设置 Env 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51162609/

相关文章:

node.js - npm postbuild 脚本在重命名文件时出现错误

node.js - npm 错误! 404 未找到 : require-from-string

git - 有效地将项目添加到 git 索引

Linux (Raspbian) 自动启动脚本

Linux Bash 如何使用 for 循环获取输出并将其放回脚本中

node.js - 使用 Node npm 请求进行网页抓取

node.js - 如何在 Heroku 上的 Nodejs 应用程序中使用 "underscore"模块?

bash - 如何使用 shell 脚本从第二列中选择一个值?

javascript - 当包含 NPM 包时,Meteor.js 中的“require is not defined”

node.js - 为什么 npm 在 npm install 后运行 prepare script,我该如何停止它?