带导出的xargs不起作用

时间:2017-06-05 07:42:49

标签: bash xargs

我有一个文件如下所示。

HOST=localhost
PORT=8080

我想将上述内容导出到环境中。我正在执行以下命令将文件中的变量导出到环境中。

cat <FileName> | xargs export

尝试运行上述命令时出现以下异常。

xargs: export: No such file or directory

4 个答案:

答案 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)