首页 > 解决方案 > 使用 env-cmd 将 bash 环境变量传递到新的 shell

问题描述

我正在尝试使用两个预先存在的 ENV 变量 DOMAIN 和 URL_PREFIX 构建一个环境变量:用于反应应用程序的 PUBLIC_URL。我希望在 npm 脚本中运行“react-scripts build”命令之前这样做。

我正在使用 .env-cmdrc.json 文件将多个环境变量存储在一个地方。我目前正在构建 var 并像这样调用命令。

env-cmd -e shared,staging --use-shell "export PUBLIC_URL=https://$DOMAIN/$URL_PREFIX && react-scripts build"

我正在从包含.env-cmdrc.json和的“客户端”文件夹中运行命令package.json。它导致以下错误,表明变量从未扩展。

  throw new ERR_INVALID_URL(input);
  ^

TypeError [ERR_INVALID_URL]: Invalid URL: https:///
    at onParseError (internal/url.js:259:9)
    at new URL (internal/url.js:335:5)
    at getPublicUrlOrPath (/home/nathanielw/.nvm/versions/node/v14.16.0/lib/node_modules/react-scripts/node_modules/react-dev-utils/getPublicUrlOrPath.js:36:28)
    at Object.<anonymous> (/home/nathanielw/.nvm/versions/node/v14.16.0/lib/node_modules/react-scripts/config/paths.js:26:25)
    at Module._compile (internal/modules/cjs/loader.js:1063:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
    at Module.load (internal/modules/cjs/loader.js:928:32)
    at Function.Module._load (internal/modules/cjs/loader.js:769:14)
    at Module.require (internal/modules/cjs/loader.js:952:19)
    at require (internal/modules/cjs/helpers.js:88:18) {
  input: 'https:///',
  code: 'ERR_INVALID_URL'
}

变量 $DOMAIN 和 $URL_PREFIX 被 react-scripts build 命令很好地使用:env-cmd -e shared,staging react-scripts build或者只是printenv DOMAIN,但它们不会出现在其他命令中,例如打印出来echo $DOMAIN

我认为在命令之间传递环境时我遗漏了一些东西,但我不知道为什么env-cmd -e shared,staging printenv DOMAIN会起作用,但env-cmd -e shared,staging echo $DOMAIN不会。

标签: bashenvironment-variablesenv-cmd

解决方案


'env' bash 中'echo' 的奇怪行为

找到一个相关的问题。我只需要切换到单引号而不是双引号,以防止在运行$DOMAIN之前评估env-cmd并设置这些变量。其他一切都很好。


推荐阅读