我想并行运行批处理。为此,我通过管道将列表传输到并行。当我有一个 if 语句来比较两个 float (采用 here 形式)时,代码不再运行。这怎么解决呢。
LIMIT=25
ps | parallel -j2 '
echo "Do stuff for {} to determine NUM"
NUM=33.3333 # set to demonstrate
if (( $(echo "$NUM > $LIMIT" | bc -l) )); then
echo "react..."
fi
echo "Do stuff..."
'
打印:
Do stuff for \ \ PID\ TTY\ \ \ \ \ \ \ \ \ \ TIME\ CMD to determine NUM
Do stuff...
(standard_in) 2: syntax error
#... snipp
最佳答案
并行 shell 内未设置 LIMIT。运行echo "$NUM > $LIMIT" | bc -l
扩展到echo "123 > " | bc -l
这会导致 bc
报告语法错误。您需要将其值导出/传递/放置到从内部并行运行的 shell 中。试试这个:
LIMIT=25
ps | parallel -j2 '
LIMIT="'"$LIMIT"'"
echo "Do stuff for {} to determine NUM"
NUM=33.3333 # set to demonstrate
if (( $(echo "$NUM > $LIMIT" | bc -l) )); then
echo "react..."
fi
echo "Do stuff..."
'
或者更好地使用env_parallel ,专为此类问题而设计。
旁注:GNU parallel设计用于使用一台或多台计算机并行执行作业。对于在一台计算机上运行的脚本,最好坚持使用 xargs 命令,该命令更常用(因此您不需要每次将脚本移动到另一台计算机时都安装一些软件包)。
关于bash - 如何在 GNU 并行 block 内的 if 语句中进行浮点比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50659107/