sleep 对应的child process 记作为B. 而trap只是对其父进程起作用,而对父进程的子进程并不起作用,而B进程(sleep)属于A的父进程的子进程;所以trap命令无法对sleep命令的SIGINT起作用; 而如果把着两条命令放到一个脚本中,则会起作用,因为当运行脚本的时候, 按下ctrl+c触发的SIGINT信号被发送到了bash脚本对应...
#!/bin/bash # test trap command trap "echo Goodbye." EXIT echo This is a test script count=1 while [ $count -le 10 ] do echo "Loop $count" sleep 1 count=$[ $count + 1 ] done echo The end. 运行结果: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 This is a test script...
其中command是在接收到任何列出的signal时要执行的命令或脚本。如果command是空字符串,那么接收到信号时将忽略该信号。 使用trap捕捉和处理信号 捕捉并执行命令 假设你想在脚本接收到SIGINT信号(通常是Ctrl+C)时执行特定的清理操作,比如打印一条消息并退出脚本。你可以这样写: #!/bin/bash# 定义在接收到SIGINT信号时...
trap命令响应EXIT信号的写法如下。 $trap'rm -f "$TMPFILE"'EXIT 上面命令中,脚本遇到EXIT信号时,就会执行rm -f "$TMPFILE"。 trap 命令的常见使用场景,就是在 Bash 脚本中指定退出时执行的清理命令。 #!/bin/bashtrap'rm -f "$TMPFILE"'EXIT TMPFILE=$(mktemp) ||exit1ls/etc >$TMPFILEifgrep -q...
IN_ERROR_HANDLER=0 # 定义调试处理函数 on_debug() { # 如果在错误处理函数中,跳过调试输出 if ((IN_ERROR_HANDLER)); then return fi # $1 是行号,$BASH_COMMAND 是即将执行的命令 echo "[DEBUG] 行 $1: 准备执行 -> $BASH_COMMAND"
如果trap需要触发多条命令,可以封装一个 Bash 函数。 functionegress{command1 command2 command3}trap egress EXIT 六、参考链接 Working with Temporary Files and Directories in Shell Scripts, Steven Vona Using Trap to Exit Bash Scripts Cleanly, Steven Vona ...
trap命令的实战⽤法 trap命令: trap命令是专⽤于捕捉信号的。⽐如像ctrl+c发送给终端的中断信号等等。在捕捉到信号之后,可以进⾏⼀系列的操作。 ⽤法:trap 'COMMAND' INT COMMAND表⽰trap命令接收到INT信号后要执⾏的动作什么。 可以捕捉的信号有:HUP INT等 不适⽤捕捉...
signal是指接收到的信号,command是指接收到该信号应采取的行动,也就是: trap'命令;命令'信号编号 或者 trap'命令;命令'信号名 Ctrl+c显示指定内容 [root@www ~]$trap'echo "<Ctrl+c> Failure."'2 [root@www ~]$ ^C<Ctrl+c> Failure. [root@www ~]$ ^C<Ctrl+c> Failure. ...
IN_ERROR_HANDLER=0 } # 启用调试跟踪 enable_debug() { # 启用 ERR trap set -E # -T 选项可以显示函数调用跟踪 set -T # 设置 DEBUG trap,传入行号参数 trap 'on_debug ${LINENO}' DEBUG trap 'on_error ${LINENO} "$BASH_COMMAND"' ERR ...
echo "[DEBUG] 行 $1: 准备执行 -> $BASH_COMMAND" } # 错误处理函数 on_error() { local err=$? # 立即保存错误码 local line=$1 local cmd=$2 # 设置标志,防止在错误处理中触发 DEBUG trap IN_ERROR_HANDLER=1 echo "[ERROR] 行 $line 执行失败" ...