bash脚本中的for循环不适用于nohup

时间:2019-01-19 09:33:40

标签: linux bash for-loop unix nohup

我有一个bash脚本,即

#!/bin/bash

for number in {1..20..1}
do
  if [ $number = 1 ]
  then
    sed 's/seed=0/seed=100/' input > input2
    mv input2 input
  elif [ $number = 2 ]
  then
    mv output output1
    sed 's/seed=100/seed=200/' input > input2
    mv input2 input
  elif [ $number = 3 ]
  then
    mv output output2
    sed 's/seed=200/seed=300/' input > input2
    mv input2 input

    .....and so on.....
  fi

  ./compiled_code <input > output

done

for循环,当我使用qsub提交bash脚本时,if语句起作用,但是当我使用nohup提交bash脚本时,for循环不起作用,它仅运行脚本一次,并且不会再次重新提交脚本。我不知道为什么 ?任何人有什么主意吗?预先感谢。

1 个答案:

答案 0 :(得分:1)

这是一个重构,它删除了重复的代码并使您的脚本与sh兼容,这是一个很好的奖励。

#!/bin/sh

while read num seed; do
    sed "s/seed=0/seed=$seed/" input >"input$num"
    ./compiled_code <"input$num" > "output$num"
    rm "input$num"
done <<____HERE
    1 100
    2 200
    3 300
    : etc
____HERE

如果看起来像您的种子值是完全可预测的,则sh循环的for兼容替代品是使用seq之类的外部实用程序(尽管这不是“要么严格使用POSIX。

for num in $(seq 1 20); do
    sed "s/seed=0/seed=${num}00/" input >"input$num"
    ./compiled_code <"input$num" > "output$num"
    rm "input$num"
done