Exit after trap fires

前端 未结 2 1409
一个人的身影
一个人的身影 2021-01-02 04:50

Take this script

#!/bin/sh

fd ()
{
  echo Hello world
  exit
}

trap fd EXIT INT

for g in {1..5}
do
  echo foo
  sle         


        
相关标签:
2条回答
  • 2021-01-02 04:55

    Do cascading traps. exit 127 will run the EXIT trap and set the exit code to 127, so you can say

    #!/bin/sh
    
    fd () {
      echo Hello world
      # No explicit exit here!
    }
    
    trap fd EXIT
    trap 'exit 127' INT
    

    I remember learning this from other people's scripts after struggling with various workarounds to your problem for several years. After that, I have noticed that some tutorials do explain this technique. But it is not documented clearly in e.g. the Bash manual page IMHO. (Or it wasn't when I needed it. Maybe some things don't change in 15 years ... :-)

    0 讨论(0)
  • 2021-01-02 05:14

    what about in redefining trap default?

    #!/bin/sh
    
    fd () {
       echo Hello world
       trap - EXIT
       exit 127
    }
    
    trap fd INT EXIT
    
    0 讨论(0)
提交回复
热议问题