use*_*732 0 linux parallel-processing bash function kill-process
我有一个并行的 Bash 函数:
#!/bin/bash
touch out.txt
vals=$(seq 1 1 20)
task(){
echo $1 >> out.txt
x=$(wc -l out.txt | cut -d' ' -f 1) #read current length of file
if [ $x > 5 ]
then
echo $x #NB prints even if <5!!
KILL_ALL_JOBS_HERE_ON_IF_THEN_CONDITION
fi
}
export -f task
echo $vals | xargs -P2 -I'{}' -d' ' bash -c 'task "$1"' bash {}
Run Code Online (Sandbox Code Playgroud)
该函数开始将二十个值回显到单个文本文件。但是,当文件长度超过 5 行时,我希望所有进程/实例停止并且不再处理变量中的值。我该怎么做?(注意一个小问题,if-then 语句也很奇怪 - 它会回显处理后的值 $x,无论它是否 >5)。
[ $x > 5 ]
是相同的:
[ $x ] > 5
Run Code Online (Sandbox Code Playgroud)
它将命令的输出重定向[到名为5. 就像echo > 5
你要:
[ "$x" -gt 5 ]
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)KILL_ALL_JOBS_HERE_ON_IF_THEN_CONDITION
如果您使用 GNU xargs,它们来自 man xargs:
如果该命令的任何调用以状态 255 退出,xargs 将立即停止,而不读取任何进一步的输入。发生这种情况时,会在 stderr 上发出错误消息。
只是exit 255。