Цикл for внутри bash-скрипта не работает с nohup - PullRequest
0 голосов
/ 19 января 2019

У меня есть скрипт 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

для цикла, и если операторы работают, когда я отправляю свой сценарий bash с помощью qsub, но когда я отправляю его с помощью nohup, цикл for не работает, он запускает сценарий только один раз и не передает его повторно. Я не знаю почему ? любое тело имеет какие-либо идеи? заранее спасибо.

1 Ответ

0 голосов
/ 21 января 2019

Вот рефакторинг, который удаляет повторяющийся код и делает ваш скрипт совместимым с 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
...