2

我们目前有一个命令,用于仅为以下参数/命令设置环境。环境变量由文件设置,通过一个简单的cat命令:

env $(cat "$1") <rest of the command>

但是,shellcheck似乎将此标记为“引用此内容以防止分词。shellcheck(SC2046)”。

处理此错误的最佳方法是什么,因为我不确定是否通过简单地忽略这种特殊情况来正确?据我所知,有多种路线可供选择(使用xargs,遵循“无用猫”的原则等)。

示例环境文件:

VARIABLE_1=TEST
VARIABLE_2=TEST2

更新

我希望社区就如何编写此类.env文件以及如何读取这些文件达成共识。与我们在命令之前内联的情况相比,文件和解释器不应该做更多的魔术。

4

1 回答 1

2

Shellcheck(像往常一样)抱怨缺少引号是正确的。如果值具有嵌入的空格,则代码将中断,如果它们包含 shell 通配符,则代码可能会中断。

添加引号 ( env "$(< "$1")" ...) 不起作用。它只会设置一个带有嵌入式换行符的环境变量,这将使env输出看起来在外观上正确,但set类似的会显示值是错误的

一种安全且 Shellcheck-clean 的方法是将文件的行读入一个数组,并将每一行作为单独的参数传递给env

readarray -t settings <"$1"
env "${settings[@]}" ...
于 2019-12-16T14:56:38.443 回答