菜鸟求助:bash怎样跳出两个for循环?

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
youzhiyili
帖子: 2422
注册时间: 2012-03-22 20:42
系统: ubuntu22.04

菜鸟求助:bash怎样跳出两个for循环?

#1

帖子 youzhiyili » 2014-05-16 23:25

实在不会,求教育。谢谢!
当按下[Ctrl+C]的时候直接跳出所有循环,删除两个文件后退出

代码: 全选

for ((x=1;x<=10;x++)) do sed -i '1d' file_1
for ((y=1;y<=10;y++)) do sed -i '1d' file_2
done
done
@自由建客 @qy117121 @枫叶饭团 @cikekid @YeLee @jtshs256 @eexpress @ljj_jjl2008 @zhw2101024 @TeliuTe @月下叹逍遥 @leeaman @懒蜗牛Gentoo @灰色小狼 @photor @adagio @JiangHui @phoenixlzx @oneleaf
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 菜鸟求助:bash怎样跳出两个for循环?

#2

帖子 eexpress » 2014-05-16 23:34

ctrl-c会被bash接管的。
● 鸣学
头像
月下叹逍遥
论坛版主
帖子: 33994
注册时间: 2010-10-07 14:23
系统: Archdows10
来自: 某系某星某洲某国某省某市
联系:

Re: 菜鸟求助:bash怎样跳出两个for循环?

#3

帖子 月下叹逍遥 » 2014-05-16 23:39

立flag
浮生七十今三十,从此凄惶未可知
nae6taiyie0T
帖子: 482
注册时间: 2013-09-13 0:42
系统: Debian sid

Re: 菜鸟求助:bash怎样跳出两个for循环?

#4

帖子 nae6taiyie0T » 2014-05-16 23:50

绑定信号就行了.
我找了一下几年前学习shell时的笔记, 以下是节选的:

代码: 全选

trap命令用来处理终端信号;比如用户按下了Ctrl-Z(挂起)或Ctrl-C(中断)了程序,程序就得处理一下临时文件。
trap commands signals
常用信号编号:
0		退出shell
1		挂起
2		中断 Ctrl-C
15		进程结束信号(默认由kill发出)

trap "rm $WORKDIR/workl$$ $WORKDIR/dataout$$; exit 2" 2
上面的命令意思是,当程序收到中断信号后,删除那两个文件,然后退出。rm后的exit命令必须有,否则程序收到信号2删除临时文件后还会从原来离开的地方继续执行。

可以用一个命令来处理多个信号:
trap "rm $WORKDIR/workl$$; exit" 1 2 

当在执行trap命令时shell扫描一遍命令行,当接到到所对表的信号之一时,又扫描一遍,可能里面的一些变量(比如在trap命令下面要引入的变量)还未被处理,希望在收到信号1或2时再进行变量替换等,可以将这些命令放在单引号中。
trap 'rm $WORKDIR/workl$$; exit' 1 2

trap命令后面不跟参数时,可以显示所有改过的trap信号。

trap命令后面只跟信号值时,表示复位信号,恢复为信号的默认设置。

如果给trap列出的命令为空,它将忽略该信号:
trap "" 2
就可以忽略中断信号;
头像
youzhiyili
帖子: 2422
注册时间: 2012-03-22 20:42
系统: ubuntu22.04

Re: 菜鸟求助:bash怎样跳出两个for循环?

#5

帖子 youzhiyili » 2014-05-17 0:45

nae6taiyie0T 写了:绑定信号就行了.
我找了一下几年前学习shell时的笔记, 以下是节选的:

代码: 全选

trap命令用来处理终端信号;比如用户按下了Ctrl-Z(挂起)或Ctrl-C(中断)了程序,程序就得处理一下临时文件。
trap commands signals
常用信号编号:
0		退出shell
1		挂起
2		中断 Ctrl-C
15		进程结束信号(默认由kill发出)

trap "rm $WORKDIR/workl$$ $WORKDIR/dataout$$; exit 2" 2
上面的命令意思是,当程序收到中断信号后,删除那两个文件,然后退出。rm后的exit命令必须有,否则程序收到信号2删除临时文件后还会从原来离开的地方继续执行。

可以用一个命令来处理多个信号:
trap "rm $WORKDIR/workl$$; exit" 1 2 

当在执行trap命令时shell扫描一遍命令行,当接到到所对表的信号之一时,又扫描一遍,可能里面的一些变量(比如在trap命令下面要引入的变量)还未被处理,希望在收到信号1或2时再进行变量替换等,可以将这些命令放在单引号中。
trap 'rm $WORKDIR/workl$$; exit' 1 2

trap命令后面不跟参数时,可以显示所有改过的trap信号。

trap命令后面只跟信号值时,表示复位信号,恢复为信号的默认设置。

如果给trap列出的命令为空,它将忽略该信号:
trap "" 2
就可以忽略中断信号;
非常感谢 :em11
@自由建客 @qy117121 @枫叶饭团 @cikekid @YeLee @jtshs256 @eexpress @ljj_jjl2008 @zhw2101024 @TeliuTe @月下叹逍遥 @leeaman @懒蜗牛Gentoo @灰色小狼 @photor @adagio @JiangHui @phoenixlzx @oneleaf
回复