我有一个 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 提交它时,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
关于linux - bash 脚本中的 For 循环不适用于 nohup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54265744/