【发布时间】: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