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 脚本 - 在退出无限循环之前完成迭代的主要内容,如果未能解决你的问题,请参考以下文章
shell脚本,提示用户输入一个用户名,如果存在;显示用户UID和SHELL信息;否则,则显示无此用户;显示完成之后,提示用户再次输入;如果是quit则退出;
运行无限循环并从“外部”获取命令(例如 shell 或其他脚本)