Bash函数不能返回大数

时间:2017-03-02 23:08:03

标签: linux bash shell terminal cluster-computing

我写了以下bash脚本:

function getqsubnumber {
# Return how many simulations ($qsubnumber) are currently running

qsubnumber=`qstat | grep p00 | wc -l`

return $qsubnumber
}


getqsubnumber
qs=$?

if [ $qs -le $X ]
    then
        echo 'Running one more simulation'
        $cmd # submit one more job to the cluster
else
    echo 'Too many simulations running ... Sleeping for 2 min'
    sleep 120

我的想法是我在集群上提交作业。如果同时运行的X个作业超过X=50,我想等待2分钟。

该代码适用于X=200X=400。由于某些未知原因,它不适用于(1..10).flat_map { |i| i.even? ? [i, i**2] : i } 。知道为什么吗?该脚本永远不会等待2分钟,它会继续提交作业。

1 个答案:

答案 0 :(得分:7)

Unix进程的返回值(以及一个shell函数就像一个)只能在一个字节的范围内,i。即0 ... 255(在某些情况下,范围是-128 ... + 127)。

要返回更大范围内的值,我建议使用stdout作为通道来提供结果:

function getqsubnumber {
  # Return how many simulations ($qsubnumber) are currently running
  qstat | grep p00 | wc -l
}

qs=$(getqsubnumber)