shell 脚本 - 在退出无限循环之前完成迭代

Posted

技术标签:

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

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

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

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

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

有什么建议吗??

【问题讨论】:

【参考方案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

【讨论】:

以上是关于shell 脚本 - 在退出无限循环之前完成迭代的主要内容,如果未能解决你的问题,请参考以下文章