我有一个文件,其中有如下几行:
"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'
)并传递给什-x
shell作为命令行的一部分。什让您查看它执行的命令。
while read -r line; do
eval "wget $line"
done < file
这里只使用当前 shell 的内置命令即可完成相同的操作 -什,狂欢或兼容。