带导出的xargs不起作用

kis*_*ore 2 bash xargs

我有一个文件,如下所示.

HOST=localhost
PORT=8080
Run Code Online (Sandbox Code Playgroud)

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

cat <FileName> | xargs export

尝试运行上面的命令时,我收到以下异常.

xargs: export: No such file or directory

hal*_*8th 9

可以使用,xargs但您必须将其作为子 shell 执行,并使用该-L 1选项一次传回一行。

export $(cat FileName | xargs -L 1)
Run Code Online (Sandbox Code Playgroud)

如果需要,这种方法将允许您进行进一步的字符串操作。例如,您可以从文件中删除空格。

export $(cat FileName | tr -d ' ' | xargs -L 1)
Run Code Online (Sandbox Code Playgroud)


Ini*_*ian 5

为何使用xargs?当你可以只source在当前shell中的文件

您可以使用set内置,export而不是使用非内置的内置xargs.就在下面

set -o allexport
. ./file_containing_variables
set +o allexport
Run Code Online (Sandbox Code Playgroud)

使用allexportflag set(-o)/ unset(+ o)可以直接从命令行导出变量.第二行是POSIX source(点后跟变量名称)命令,将所有变量反映到当前 shell,并在allexport标志内,它永久可用.

有关更多详细信息,请参阅GNU set内置页面.


bash在文件上使用输入重定向的另一种方法

while IFS= read -r line; do
    export "$line"
done <file_containing_variables
Run Code Online (Sandbox Code Playgroud)


Die*_*ist 5

export是一个内置函数,并将xargs可执行文件作为参数,而不是函数。此外,包装export到某些脚本或子 xargs外壳中没有任何意义,在这种情况下不会失败,但无论如何都不会导出您的变量。所以最好选择另一种方法, w/o xargs,如上一条评论中所示。