我有一个文件如下所示。
HOST=localhost
PORT=8080
我想将上述内容导出到环境中。我正在执行以下命令将文件中的变量导出到环境中。
cat <FileName> | xargs export
尝试运行上述命令时出现以下异常。
xargs: export: No such file or directory
答案 0 :(得分:5)
为什么要使用xargs
?当你只能source
当前shell中的文件
您可以使用set
内置版本以及export
,而不是使用像xargs
这样的非shell内置版本。只需在下面
set -o allexport
. ./file_containing_variables
set +o allexport
使用allexport
标志设置(-o)/ unset(+ o)可以直接从命令行导出变量。第二行是POSIX
source
(点后跟变量名)命令,以将所有变量反映到当前 shell并在allexport
标志内,它是永久可用。
有关详情,请参阅GNU set
built-in页面。
bash
使用文件
while IFS= read -r line; do
export "$line"
done <file_containing_variables
答案 1 :(得分:4)
可以使用xargs
,但是您必须将其作为子外壳执行,并使用-L 1
选项一次传回一行。
export $(cat FileName | xargs -L 1)
如果需要,此方法将允许您进行进一步的字符串操作。例如,您可以从文件中删除空格。
export $(cat FileName | tr -d ' ' | xargs -L 1)
答案 2 :(得分:2)
export
是一个内置函数,xargs
将可执行文件作为参数,而不是函数。此外,将export
包装到某个脚本或子shell中是没有意义的,xargs
在这种情况下不会失败,但无论如何都不会导出您的vars。
最好选择另一种方法,不用xargs
,就像之前评论中所示。
答案 3 :(得分:1)
Dieselist正确地解释了原始方法不起作用的原因。 Inian提出的方法应该有效,但更简单的方法是(参见Command Substitution):
export $(<FileName)