linux - 陷阱在 linux 脚本中不捕获退出代码

标签 linux bash

    testttt(){
    echo after trapp
    }
    test(){
    echo inside testcode
    exit 2
    }
    trap 'testttt' 2
    test

当我运行脚本时,我得到了输出 ->内部测试代码 但我期待 ->内部测试代码 在特拉普之后 为什么 trap 'testttt' 2 不捕获 testttt()

最佳答案

您的陷阱仅在您的脚本收到 SIGINT(信号 2)时执行,而不是在它以状态 2 退出时执行。

相反,您应该捕获 EXIT,然后在您的处理程序中测试退出状态。

testttt(){
    exit_status=$?
    if [[ $exit_status -eq 2 ]]; then
        echo after trapp
    fi
}
test(){
    echo inside testcode
    exit 2
}
trap 'testttt' EXIT
test

关于linux - 陷阱在 linux 脚本中不捕获退出代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36356191/

相关文章:

bash - 将 C 头文件中的#defines 转换为 bash 变量

linux - 使用 "sed"显示 test.txt 的前 2 行和后 3 行

linux - 在后台运行 Perl 脚本并向其发送命令

ruby - 在 vim 中看不到自动完成和代码提示

java.lang.Process 将错误流重定向到/dev/null

Bash elif 似乎没有被使用

bash - 使用 sed 删除 CSV 列中的字符

linux - Bash-在多个目录上执行相同的命令

linux - Vim - CtrlP(或病原体)只加载帮助页面?

git - 将 parse_git_branch 函数从 bash 翻译成 zsh(用于提示)