【问题标题】:Bash: Export Environment Variable from Script file and Discoverable by Node process.envBash:从脚本文件中导出环境变量并可由节点 process.env 发现
【发布时间】:2020-12-14 20:12:20
【问题描述】:

目标:从 Bash 脚本文件中设置环境变量,并通过节点 process.env 发现环境变量

正如预期的那样,在 macOS 控制台上进行了以下工作:

我创建了以下打字稿文件process.env.ts,它输出到控制台环境变量TEST_ENV_VALUE

declare let process: {
    env: {
        TEST_ENV_VALUE: string;
    };
};

console.log('process.env.TEST_ENV_VALUE', process.env.TEST_ENV_VALUE);

package.json 脚本包含:

  "scripts": {
    "test:process": "ts-node test/process.env.ts"
  },

当我直接在 macOS 控制台中执行以下操作时,process.env.ts 可以发现环境变量 TEST_ENV_VALUE

$ unset TEST_ENV_VALUE
$ export TEST_ENV_VALUE="FOO"
$ echo $TEST_ENV_VALUE
FOO
$ npm run test:process
> ts-node test/process.env.ts

process.env.TEST_ENV_VALUE FOO

成功表明process.env.TEST_ENV_VALUE返回FOO的值。

尝试使用相同的控制台脚本创建 Bash 脚本文件

以下 bash 脚本文件 set_env_variable.sh 正在尝试复制能够在 macOS 控制台中执行的操作:

#!/usr/bin/env bash

USAGE="\nUsage: $0\n
[-h|--help]\n
--value\n
"

usage() { echo -e ${USAGE} 1>&2; exit 1; }

# read the options
OPTS=`getopt -o h --long help,value: -n 'set_env_variable.sh' -- "$@"`
if [ $? != 0 ] ; then echo "Failed parsing options." >&2 ; usage ; exit 1 ; fi
eval set -- "$OPTS"

HELP=false
TEST_ENV_VALUE="TEST"

while true; do
  case "$1" in
    -h | --help )       usage ;;
    --value )           TEST_ENV_VALUE="$2" ; shift; shift ;;
    -- )                shift; break ;;
    * )                 break ;;
  esac
done

echo -e '\n-------------------------\n'
echo TEST_ENV_VALUE="${TEST_ENV_VALUE}"
echo -e '\n-------------------------\n'
unset TEST_ENV_VALUE
export TEST_ENV_VALUE="${TEST_ENV_VALUE}"

npm run test:process

但是,当 set_env_variable.sh 执行时,process.env.ts 无法发现环境变量 TEST_ENV_VALUE

$ unset TEST_ENV_VALUE
$ ./set_env_variable.sh --value "BAR"
-------------------------
TEST_ENV_VALUE=BAR
-------------------------
> act-qa@1.3.0 test:process /Users/jeffrey.tanner/github/ACT/act-qa
> ts-node test/process.env.ts

process.env.TEST_ENV_VALUE

换句话说,process.env.TEST_ENV_VALUE 返回未定义。

帮助创建一个 bash 脚本,该脚本将导出节点 process.env 可发现的环境变量。谢谢

【问题讨论】:

  • 将脚本运行为 #!/bin/bash 而不是 /usr/bin/env 会发生什么?
  • @RamanSailopal 感谢您的回复。好主意。结果相同。 process.env.TEST_ENV_VALUE 返回未定义

标签: node.js bash environment-variables


【解决方案1】:

为什么要取消设置变量然后再次导出?

unset TEST_ENV_VALUE
export TEST_ENV_VALUE="${TEST_ENV_VALUE}"

根据定义,这就是导出一个空字符串。删除这两行并替换

TEST_ENV_VALUE="TEST"

export TEST_ENV_VALUE="TEST"

【讨论】:

    【解决方案2】:

    @KurisRader

    我根据你的建议重新设计了:

    HELP=false
    VALUE=""
    
    while true; do
      case "$1" in
        -h | --help )       usage ;;
        --value )           VALUE="$2" ; shift; shift ;;
        -- )                shift; break ;;
        * )                 break ;;
      esac
    done
    
    echo -e '\n-------------------------\n'
    echo TEST_ENV_VALUE="${VALUE}"
    echo -e '\n-------------------------\n'
    
    unset TEST_ENV_VALUE
    export TEST_ENV_VALUE="${VALUE}"
    

    【讨论】:

      猜你喜欢
      • 2012-10-26
      • 2021-10-20
      • 2021-08-12
      • 1970-01-01
      • 1970-01-01
      • 2015-07-24
      • 2022-01-17
      • 2017-12-25
      • 2021-07-11
      相关资源
      最近更新 更多