Node.js Bash:从脚本文件导出环境变量,可通过节点process.env发现

Node.js Bash:从脚本文件导出环境变量,可通过节点process.env发现,node.js,bash,environment-variables,Node.js,Bash,Environment Variables,目标:从Bash脚本文件设置环境变量,并通过节点发现 正如预期的那样,以下工作可以从macOS控制台运行: 我创建了以下类型脚本文件process.env.ts,该文件输出到控制台环境变量TEST\u env\u VALUE: 声明let进程:{ 环境:{ 测试环境值:字符串; }; }; log('process.env.TEST\u env\u VALUE',process.env.TEST\u env\u VALUE); package.json脚本包含: "scripts

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

正如预期的那样,以下工作可以从macOS控制台运行:

我创建了以下类型脚本文件
process.env.ts
,该文件输出到控制台环境变量
TEST\u env\u VALUE

声明let进程:{
环境:{
测试环境值:字符串;
};
};
log('process.env.TEST\u env\u VALUE',process.env.TEST\u env\u VALUE);
package.json脚本包含:

  "scripts": {
    "test:process": "ts-node test/process.env.ts"
  },
当我直接在macOS控制台中执行以下操作时,
process.ENV.ts
可以发现环境变量
TEST\u ENV\u VALUE

$unset TEST\u ENV\u值
$export TEST\u ENV\u VALUE=“FOO”
$echo$TEST_ENV_值
福
$npm运行测试:进程
>ts节点测试/process.env.ts
process.env.TEST_env_VALUE FOO
成功显示
process.env.TEST\u env\u VALUE
返回FOO的值

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

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

#/usr/bin/env bash
用法=“\n用法:$0\n
[-h |--帮助]\n
--值\n
"
用法(){echo-e${usage}1>&2;退出1;}
#阅读选项
OPTS=`getopt-oh--long help,value:-n'set_env_variable.sh'--“$@”`
如果[$?!=0];然后回显“解析选项失败”。>&2;用法;出口1;fi
评估集--“$OPTS”
帮助=错误
TEST_ENV_VALUE=“TEST”
虽然真实;做
案件“$1”
-(帮助)用法;;
--值)测试环境值=“$2”;转移;移位;;
--)轮班;打破
*)打破;;
以撒
完成
echo-e'\n--------------------------------------\n'
echo TEST_ENV_VALUE=“${TEST_ENV_VALUE}”
echo-e'\n--------------------------------------\n'
未设置测试环境值
export TEST_ENV_VALUE=“${TEST_ENV_VALUE}”
npm运行测试:进程
但是,当执行设置环境变量.sh时,
过程无法发现环境变量
测试环境值

$unset TEST\u ENV\u值
$./set_env_variable.sh--值“BAR”
-------------------------
测试环境值=巴
-------------------------
>表演-qa@1.3.0测试:过程/用户/jeffrey.tanner/github/ACT/ACT-qa
>ts节点测试/process.env.ts
process.env.TEST_env_值
换句话说,
process.env.TEST\u env\u VALUE
返回未定义的值


在创建bash脚本以导出可由node process.env发现的环境变量时,请提供帮助。谢谢

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

unset TEST_ENV_VALUE
export TEST_ENV_VALUE="${TEST_ENV_VALUE}"
根据定义,它导出的是一个空字符串。拆下这两条管路并更换

TEST_ENV_VALUE="TEST"

@库里斯拉德

我根据你的建议进行了返工:

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}"

将脚本作为#运行时会发生什么情况/bin/bash而不是/usr/bin/env?@RamanSailopal感谢您的回复。好主意。同样的结果<代码>进程环境测试环境值
返回未定义
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}"