簡體   English   中英

bash腳本中的for循環不適用於nohup

[英]For loop inside a bash script is not working with 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

當我使用qsub提交我的bash腳本時,for循環和if語句起作用,但是當我使用nohup提交bash腳本時,for循環不起作用,它僅運行腳本一次,並且不會再次提交該腳本。 我不知道為什么 ? 任何人有什么主意嗎? 提前致謝。

這是一個重構,它刪除了重復的代碼,並使您的腳本與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

如果看起來像您的種子值是完全可預測的,則for循環的sh兼容替代品是使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM