这是我当前使用的命令:
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;符号和我的文件不包含...但不是所有时间......可能是什么问题?
答案 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)。
顺便说一句:如果我通过
vi
或nano
粘贴同一个文件并进行复制/粘贴,则可以正常工作。
编辑可能会自动为您转换文件格式。请参阅: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
。