【问题标题】:Why Can't I Set Env Variables By Running A BASH Script From An Npm Script?为什么我不能通过从 Npm 脚本运行 BASH 脚本来设置环境变量?
【发布时间】:2018-12-12 05:48:34
【问题描述】:

我有一个 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 脚本,以便将环境变量保存到其余部分命令提示符会话。谢谢!

【问题讨论】:

    标签: bash npm npm-scripts


    【解决方案1】:

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

    【讨论】:

    • 谢谢,但是你确定不能让它影响当前的shell进程吗?
    • 是的;这是一个基本概念,一个进程的环境不能被它的一个子进程修改。
    猜你喜欢
    • 2016-10-07
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 2019-05-17
    • 2015-09-28
    • 2016-12-23
    相关资源
    最近更新 更多