我正在尝试在 bash 中并行下载多个文件,并且遇到了 GNU 并行。它看起来非常简单和直接。但我很难让 GNU 并行工作。我究竟做错了什么?任何指示表示赞赏。正如您所看到的,输出是非常连续的,我希望输出每次都不同。我在 SO 中看到了类似的问题(GNU 并行根本不起作用),但是提到的解决方案对我来说不起作用。
svarkey@svarkey-Precision-5510:~$ seq 1 3 | xargs -I{} -n 1 -P 4 kubectl 版本 --short=true --context cs-prod{} --v=6 I0904 11:33:10.635636 24861 loader.go:375] 从文件加载配置:/home/svarkey/.kube/config I0904 11:33:10.640718 24863 loader.go:375] 从文件加载配置:/home/svarkey/.kube/config I0904 11:33:10.640806 24862 loader.go:375] 从文件加载配置:/home/svarkey/.kube/config I0904 11:33:11.727974 24863 round_trippers.go:443] GET https://kube-api.awsw3.cld.dtvops.net/version?timeout=32s 200 OK 在 1086 毫秒内 客户端版本:v1.18.7 服务器版本:v1.14.6 I0904 11:33:11.741985 24861 round_trippers.go:443] GET https://kube-api.awsw1.cld.dtvops.net/version?timeout=32s 200 OK 在 1105 毫秒内 客户端版本:v1.18.7 服务器版本:v1.14.6 I0904 11:33:11.859882 24862 round_trippers.go:443] GET https://kube-api.awsw2.cld.dtvops.net/version?timeout=32s 200 OK 在 1218 毫秒内 客户端版本:v1.18.7 服务器版本:v1.14.6 svarkey@svarkey-Precision-5510:~$ seq 1 3 | svarkey@svarkey-Precision-5510:~$ seq 1 3 |并行 -j 4 -I{} kubectl 版本 --short=true --context cs-prod{} --v=6 客户端版本:v1.18.7 服务器版本:v1.14.6 I0904 11:33:18.584076 24923 loader.go:375] 从文件加载配置:/home/svarkey/.kube/config I0904 11:33:19.662197 24923 round_trippers.go:443] GET https://kube-api.awsw1.cld.dtvops.net/version?timeout=32s 200 OK 在 1077 毫秒内 客户端版本:v1.18.7 服务器版本:v1.14.6 I0904 11:33:18.591033 24928 loader.go:375] 从文件加载配置:/home/svarkey/.kube/config I0904 11:33:19.691343 24928 round_trippers.go:443] GET https://kube-api.awsw3.cld.dtvops.net/version?timeout=32s 200 OK 在 1099 毫秒内 客户端版本:v1.18.7 服务器版本:v1.14.6 I0904 11:33:18.591033 24924 loader.go:375] 从文件加载配置:/home/svarkey/.kube/config I0904 11:33:19.775152 24924 round_trippers.go:443] GET https://kube-api.awsw2.cld.dtvops.net/version?timeout=32s 200 OK 在 1183 毫秒内 svarkey@svarkey-Precision-5510:/tmp/parallel-20200822$ 并行 --version GNU 并行 20200822 版权所有 (C) 2007-2020 Ole Tange,http://ole.tange.dk 和自由软件 基金会有限公司 许可证 GPLv3+:GNU GPL 版本 3 或更高版本 这是免费软件:您可以自由更改和重新分发它。 GNU 并行没有任何保证。 网站:https://www.gnu.org/software/parallel
答案1
parallel
输出是顺序的,因为它捕获进程输出并仅在该进程完成时才打印它,xargs
这与让进程立即打印输出不同。
从man parallel
GNU parallel makes sure output from the commands is the same output as
you would get had you run the commands sequentially. This makes it
possible to use output from GNU parallel as input for other programs.