当按下[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
代码: 全选
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
代码: 全选
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
就可以忽略中断信号;
非常感谢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 就可以忽略中断信号;