【问题标题】:xargs with export is not working带导出的 xargs 不起作用
【发布时间】:2017-11-05 22:31:49
【问题描述】:

我有一个如下所示的文件。

HOST=localhost
PORT=8080

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

cat <FileName> | xargs export

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

xargs: export: No such file or directory

【问题讨论】:

标签: bash xargs


【解决方案1】:

为什么使用xargs?当你可以source当前shell中的文件时

您可以使用set 内置函数和export,而不是使用像xargs 这样的非shell 内置函数。就在下面做

set -o allexport
. ./file_containing_variables
set +o allexport

在 set(-o)/unset(+o) 中使用allexport 标志可以让您直接从命令行导出变量。第二行是POSIXsource(点后跟变量名)命令,用于将所有变量反映到当前 shell 和allexport 标志内,使其永久可用。

更多详情请参考GNU set built-in页面。


bash 中使用文件输入重定向的另一种方式

while IFS= read -r line; do
    export "$line"
done <file_containing_variables

【讨论】:

    【解决方案2】:

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

    export $(cat FileName | xargs -L 1)
    

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

    export $(cat FileName | tr -d ' ' | xargs -L 1)
    

    【讨论】:

      【解决方案3】:

      export 是一个内置函数,xargs 将可执行文件作为参数,而不是函数。此外,将export 包装到某个脚本或子shell 中是没有意义的,xargs 在这种情况下不会失败,但无论如何您的变量都不会被导出。 所以最好选择另一种方法,不带xargs,就像前面的评论中显示的那样。

      【讨论】:

        【解决方案4】:

        Dieselist 正确解释了原始方法不起作用的原因。 Inian 提出的方法应该可行,但更简单的方法是(参见Command Substitution):

        export $(&lt;<i>FileName</i>)

        【讨论】:

        • 不幸的是,这不适用于包含空格的值。一个人从导出中得到一个错误,上面写着:export: not valid in this context
        猜你喜欢
        • 2011-09-30
        • 2017-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-19
        • 1970-01-01
        相关资源
        最近更新 更多