xargs不能正确读取

时间:2015-03-03 14:24:21

标签: unix xargs

这是我当前使用的命令:

xargs -n 1 -P 100 php b <links

我有一个脚本&#39; b&#39;和一个链接在&#39;链接&#39;有时我不知道为什么这不能正常工作并添加到每一行符号&#34;?&#34; 像这样:

root     19714  0.0  1.0  19880  5480 pts/2    R+   11:19   0:00 php b http://www.google.com?
root     19715  0.0  0.9  19524  4892 pts/2    R+   11:19   0:00 php b http://www.alexa.com?
root     19716  0.0  1.0  19880  5496 pts/2    R+   11:19   0:00 php b http://www.amazon.com?

看到ps-aux结果行的结尾是&#34;?&#34;符号和我的文件不包含...但不是所有时间......可能是什么问题?

1 个答案:

答案 0 :(得分:1)

将评论转换为答案

您的链接文件是否具有CRLF(Windows或DOS样式)行结尾?在这种情况下,?表示CR(回车)...并且修复是将DOS文件转换为沿线某处的Unix文件。例如:

tr -d '\r' < links | xargs -n 1 -P 100 php b

  

我使用cat "[another file]" | sort | uniq > links构建链接文件。所以我不认为这是Windows / DOS风格的问题。

[another file]是否有DOS格式的行结尾?如果是这样,links也会;如果它们在输入中,命令行将保留CRLF行结尾。

此外,cat的使用通常是不必要的(UUoC或无用的猫),在这种情况下也不需要uniq;你可以用

sort -u "[another file]" > links
  

[another file]是这样的:

line1\r\nline2\r\nline3\r\n

\r\n是在Unix上报告CRLF行结尾的方式之一。 \r表示法用于回车,CR,C和其他语言; \n表示法用于换行符(NL,又名换行符或LF)。

  

顺便说一句:如果我通过vinano粘贴同一个文件并进行复制/粘贴,则可以正常工作。

编辑可能会自动为您转换文件格式。请参阅:How to convert the ^M linebreak to normal linebreak in a file opened in vim?或者,如果您要复制和粘贴,则副本可能无法查看,因此无法复制CR字符。

  

我尝试使用tr -d …并且有效。

好;这至少意味着这是一个合理的解释,这一切都是有道理的。如果您不需要单独链接列表,可以使用:

sort -u "[another file]" | tr -d '\r' | xargs -n 1 -P 100 php b

这在一个命令行中完成所有操作,没有要清理的中间文件。如果你确实想要文件列表,你可以在tee links |之前添加xargs