我们目前有一个仅用于为以下参数/命令设置环境的命令。环境变量是通过一个简单的 cat
命令由文件设置的:
env $(cat "$1") <rest of the command>
但是,shellcheck似乎将此标记为“引用此内容以防止分词。shellcheck(SC2046)”。
处理此错误的最佳方法是什么,因为我不确定在这种特殊情况下简单地忽略它是否正确?据我所知,有多种路线可供选择(使用 xargs,遵循 "useless cat" 等原则)。
示例环境文件:
VARIABLE_1=TEST
VARIABLE_2=TEST2
更新
我希望社区就如何编写此类 .env
文件以及如何读取这些文件达成共识。文件和解释器都不应该比我们在命令之前内联的情况执行更多的魔术。
最佳答案
Shellcheck(像往常一样)提示缺少引号是正确的。如果值中嵌入了空格,则代码将会中断;如果它们包含 shell 通配字符,则代码可能会中断。
添加引号 ( env "$(< "$1")" ...
) 不起作用。它只会设置一个带有嵌入换行符的环境变量,这将使 env
输出看起来很正确,但是 set
类似的会表明这些值是错误的
一种安全且 Shellcheck 干净的方法是将文件的行读入数组并将每一行作为单独的参数传递给 env
:
readarray -t settings <"$1"
env "${settings[@]}" ...
关于bash - 使用 `env` 命令并通过文件传递环境变量的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59353986/