陷阱在linux脚本中没有捕获退出代码

时间:2016-04-01 12:19:33

标签: linux bash

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

当我运行脚本时,我得到输出          - >内部测试代码          但我在期待          - >内部测试代码        在trapp之后        为什么没有陷阱'testttt'2捕获testttt()

2 个答案:

答案 0 :(得分:1)

只有当您的脚本收到reference_wrapper<milliseconds>(信号2)时,您的陷阱才会执行,而不会在状态为2的任何时候退出。

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

EXIT

答案 1 :(得分:0)

添加到@chepner答案,您可以通过以下方式向正在运行的脚本发送中断:

   testttt(){
    echo after trapp
    }
    test(){
    echo inside testcode
    kill -s SIGINT $$
    }
    trap 'testttt' 2
    test

$$将包含脚本的PID。