我正在使用gnu parallel命令监视少量Redis端点,然后在新端点上执行所有命令。
当前命令如下:

parallel --ungroup redis-cli -h {} monitor :::: old-server-list | cut -d  "]" -f 2 | parallel --ungroup -k ./writter.sh {}

和writter.sh
parallel redis-cli -h {} $1 ::: redis-host-1 redis-host-2

但是我在旧端点与新端点上执行命令所需的时间不一致,导致与新Redis的连接一直关闭和打开。是否可以同时从stdin和file将参数传递给并行命令?将来自“new-server-list”的每个记录与相同的stdin输入合并以避免调用脚本?

就像是:
parallel ... | cut ... | parallel redis-cli -h {<line from new-server-list>} {<stdin from pipe>}

应该执行为:
redis-cli -h redis-host-1 stdin_output1
redis-cli -h redis-host-2 stdin_output1
redis-cli -h redis-host-1 stdin_output2
redis-cli -h redis-host-2 stdin_output2

最佳答案

您可以使用paste并排粘贴两列,一列来自文件,另一列来自命令:

因此,请看以下内容:

seq 10
1
2
3
4
5
6
7
8
9
10

另一个名为list.txt的文件以另一种方式运行:
10
9
8
7
6
5
4
3
2
1

现在,paste执行以下操作:
paste list.txt <(seq 10)
10  1
9   2
8   3
7   4
6   5
5   6
4   7
3   8
2   9
1   10

您可以将其输入 GNU Parallel 中:
paste list.txt <(seq 10) | parallel -k --colsep '\t' echo {2} {1}
1 10
2 9
3 8
4 7
5 6
6 5
7 4
8 3
9 2
10 1

关于bash - Gnu并行合并来自stdin和文件的args,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52495082/

10-12 22:31