【问题标题】:shell script - complete iteration before exiting infinite loopshell 脚本 - 在退出无限循环之前完成迭代
【发布时间】:2014-07-19 07:55:04
【问题描述】:

我对 shell 脚本非常陌生,需要帮助。

我想运行一些带有无限循环的命令,并且我希望在按下 ctrl-c 时终止循环,但在终止之前我希望完成当前迭代(意味着应该执行循环中的所有语句。

infinite-loop (
   command 1;
   command 2; 
   command 3;
loop-ends

在执行的任何时候按 ctrl-c,所有 3 个命令都应该在循环终止之前执行。如果没有按下 ctrl-c,循环应该继续执行。

有什么建议吗??

【问题讨论】:

    标签: shell infinite-loop


    【解决方案1】:

    您可以使用trap 来捕获 SIGINT 信号。 (已测试)

    #!/bin/sh
    
    trap ctrl_c INT
    
    ctrl_c () {
      RUNNING=0
    }
    
    RUNNING=1
    
    while [  "$RUNNING" = 1 ]; do
      echo 'working'
      sleep 1
      echo 'on something else'
      sleep 1
      echo 'done'
    done
    

    【讨论】:

      【解决方案2】:

      像这样(未经测试)

      #!/bin/bash
      trap "DONE=1" SIGINT
      DONE=0
      while [ $DONE -eq 0 ]
      do
          process1
          process2
          process3
      done
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-22
        • 1970-01-01
        • 2018-02-08
        • 2017-11-29
        • 2016-07-27
        • 2017-09-20
        • 2017-08-27
        • 1970-01-01
        相关资源
        最近更新 更多