为什么在Doppler中echo命令不生效但printenv可以正常运行?
问题原因
该现象由Shell的变量提前展开机制导致:
- 执行
doppler run -- echo $TEST_PASSWORD时,当前Shell会在启动doppler进程前,优先对命令中的$TEST_PASSWORD做变量替换。由于TEST_PASSWORD不存在于当前终端的环境变量中,替换后实际传给doppler执行的命令为echo(无有效参数),因此输出为空。 doppler run -- printenv TEST_PASSWORD可正常返回的原因是,printenv会直接读取自身进程的环境变量列表,不需要Shell提前做变量展开,doppler会将密钥注入到printenv进程的运行环境中,因此可以正常读到值。
解决方法
要通过echo输出doppler注入的密钥,需要让变量展开的动作发生在doppler启动的、已经完成环境变量注入的子Shell中,执行以下命令即可:doppler run -- sh -c 'echo $TEST_PASSWORD'
注意必须使用单引号包裹
echo $TEST_PASSWORD部分,如果使用双引号,当前Shell仍然会提前展开变量,依旧会得到空结果。
内容的提问来源于stack exchange,提问作者Jackie
相关产品推荐
相关产品推荐

