上一个
这是this问题的后续。
规格
我的系统是一个运行ubuntu桌面的专用服务器,版本12.04(精确)64位,3.14.32-xxxx-std-ipv6-64。发行版和内核都不能升级,但我可以安装任何软件包。
问题
上面问题中描述的问题似乎已经解决了,但这对我不起作用。我已经安装了最新的lftp和并行软件包,它们看起来对自己很好。
运行lftp可以正常工作。
运行./job.sh ftp.microsoft.com很好,但我需要chmod -x脚本
运行sed 's/|.*$//' end_unique.txt | xargs parallel -j20 ./job.sh :::不起作用,并以/bin/bash: <server>: command not found.的形式产生bash错误
为了简化,我清理了输入文件end_unique.txt,现在每行的格式如下:

<server>

每一行以crlf结尾,因为它是从windows服务器导入的。
编辑1:
这是job.sh脚本:
#/bin/sh
server="$1"
lftp -e "find .; exit" "$server" >"$server-files.txt"

编辑2:
我拿了这个文件,对fromdos进行了测试。现在它应该是标准的unix格式,每行一个服务器。请记住,文件中的服务器的格式可能会有所不同:
ftp.server.com
www.server.com
server.com
123.456.789.190

所有这些服务器都是ftp服务器,可通过ftp://<serverfromfile>/访问。

最佳答案

对于:::parallel需要参数列表来完成要在命令行上显示的命令,如

parallel -j20 ./job.sh ::: server1 server2 server3

如果没有:::它就会从stdin读取参数,这在本例中对我们更有帮助。你可以简单地说
parallel -j20 ./job.sh < end_unique.txt

附录:可能出错的地方
确定两件事:
您使用的是gnuparallel而不是另一个版本(例如moreutils中的版本),因为只有(据我所知)gnu版本支持从stdin读取参数列表,并且
gnu parallel没有配置为禁用gnu扩展。结果,在评论中经过长时间的讨论后,他们在Ubuntu12.04上被默认禁用,所以在其他地方(特别是Ubuntu12.04的下游)可能会发现这种情况并非不可想象。这样的配置可以隐藏在
环境变量$PARALLEL
/etc/parallel/config
~/.parallel/config
如果gnu版本的parallel对您不可用,并且如果您的参数列表对于shell来说不太长,并且其中的任何参数都不包含空格,那么moreutilsparallel的相同之处是
parallel -j20 job.sh -- $(cat end_unique.txt)

这对op不起作用,因为该文件包含的服务器比shell希望放入命令行的服务器要多,但它可能对其他有类似问题的服务器起作用。

关于linux - Bash:使用xargs从文件读取参数时出现意外的并行行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30823870/

10-12 07:32
查看更多