linux - bash 脚本中的 For 循环不适用于 nohup

标签 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

当我使用 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/

相关文章:

java - 使用 gcc 编译时未创建输出文件

c++ - v.end() 指向哪里?

python - 在Python for循环中使用 "or"来定义默认序列

Linux 命令管道 : using iwlist with grep to display two piece of information

linux - 如果 nginx 配置正在运行或停止,如何重新加载它?

c++ - Qt + iperf3 = lconv 未声明

Java:A类中的队列

C++/Linux - 是否可以将特定于上下文的数据注入(inject)到创建的每个线程中

用 c 编写 bash : don't understand how to implement the pipes

linux - 为什么 "rm"命令会覆盖bash脚本的显示