【发布时间】:2017-11-05 22:31:49
【问题描述】:
我有一个如下所示的文件。
HOST=localhost
PORT=8080
我想将以上内容导出到环境中。我正在执行以下命令将文件中的变量导出到环境中。
cat <FileName> | xargs export
尝试运行上述命令时出现以下异常。
xargs: export: No such file or directory
【问题讨论】:
我有一个如下所示的文件。
HOST=localhost
PORT=8080
我想将以上内容导出到环境中。我正在执行以下命令将文件中的变量导出到环境中。
cat <FileName> | xargs export
尝试运行上述命令时出现以下异常。
xargs: export: No such file or directory
【问题讨论】:
为什么使用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
【讨论】:
可以使用xargs,但您必须将其作为子shell 执行并使用-L 1 选项一次传回一行。
export $(cat FileName | xargs -L 1)
这种方法可以让您在需要时进行进一步的字符串操作。例如,您可以从文件中删除空格。
export $(cat FileName | tr -d ' ' | xargs -L 1)
【讨论】:
export 是一个内置函数,xargs 将可执行文件作为参数,而不是函数。此外,将export 包装到某个脚本或子shell 中是没有意义的,xargs 在这种情况下不会失败,但无论如何您的变量都不会被导出。
所以最好选择另一种方法,不带xargs,就像前面的评论中显示的那样。
【讨论】:
Dieselist 正确解释了原始方法不起作用的原因。 Inian 提出的方法应该可行,但更简单的方法是(参见Command Substitution):
export $(<<i>FileName</i>)
【讨论】:
export: not valid in this context