使用 xargs 执行文件的行,使用 stdout 重定向

使用 xargs 执行文件的行,使用 stdout 重定向

我有一个文件,其中有如下几行:

"http://api.domain.com/path/to/resource?format=json" > output.xml

我从命令行执行以下操作:

cat file | xargs -L 1 -I {} wget {}

不幸的是,命令看起来好像可以执行,但实际上并没有创建任何文件。当我使用以下命令时:

cat file | xargs -L 1 -I {} echo {}

它打印文件的行没有双引号。我认为这可能是问题的根源。我该如何让它包含它们?

我怎样才能正确执行该wget命令?

答案1

引号、重定向运算符等通常由您的在构造 argv[] 数组之前。>被剥离;shell 执行重定向。 引号被剥离;shell 执行分词。

参数,整个输入行直接地到 argv[],其中引号和运算符被传递给 wget,但 wget 不知道如何处理它们。

要解析此类输入文件,您需要通过两种可能的方式从 shell 获取帮助。


< file xargs -d '\n' -I {} sh -x -c "wget {}"

这种方式file正在被阅读逐行不允许 xargs 进行任何拆分(-d '\n')并传递给-xshell作为命令行的一部分。让您查看它执行的命令。


while read -r line; do
    eval "wget $line"
done < file

这里只使用当前 shell 的内置命令即可完成相同的操作 -狂欢或兼容。

相关内容