我试图使用xargs并行调用更复杂的函数.
#!/bin/bash
echo_var(){
echo $1
return 0
}
seq -f "n%04g" 1 100 |xargs -n 1 -P 10 -i echo_var {}
exit 0
Run Code Online (Sandbox Code Playgroud)
这将返回错误
xargs: echo_var: No such file or directory
Run Code Online (Sandbox Code Playgroud)
关于如何使用xargs来完成此任务或任何其他解决方案的任何想法都将受到欢迎.
Pau*_*ce. 151
导出该函数应该这样做(未经测试):
export -f echo_var
seq -f "n%04g" 1 100 | xargs -n 1 -P 10 -I {} bash -c 'echo_var "$@"' _ {}
Run Code Online (Sandbox Code Playgroud)
您可以使用内置printf
而不是外部seq
:
printf "n%04g\n" {1..100} | xargs -n 1 -P 10 -I {} bash -c 'echo_var "$@"' _ {}
Run Code Online (Sandbox Code Playgroud)
此外,使用return 0
和exit 0
类似掩码可能由其前面的命令产生的任何错误值.此外,如果没有错误,这是默认值,因此有点多余.
Ole*_*nge 16
使用GNU Parallel看起来像这样:
#!/bin/bash
echo_var(){
echo $1
return 0
}
export -f echo_var
seq -f "n%04g" 1 100 | parallel -P 10 echo_var {}
exit 0
Run Code Online (Sandbox Code Playgroud)
如果你使用的是版本20170822,export -f
那么只要你运行它就不需要:
. `which env_parallel.bash`
seq -f "n%04g" 1 100 | env_parallel -P 10 echo_var {}
Run Code Online (Sandbox Code Playgroud)
小智 8
这样的东西也应该起作用:
function testing() { sleep $1 ; }
echo {1..10} | xargs -n 1 | xargs -I@ -P4 bash -c "$(declare -f testing) ; testing @ ; echo @ "
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
50772 次 |
最近记录: |