Search code examples
shellunixexitcommand-execution

Shell script: Execute command after running "exit" command in the shell script


I have a situation where in I have a command in my shell script that must be executed after a exit command is executed in the same script (I know!! It sounds crazy!!)

I want to find a solution for something like

#!/bin/sh
ls -l ~/.
exit $?
touch ~/abc.txt

Here I want the command touch ~/abc.txt execute after exit $? has run and the command touch ~/abc.txt can be any command.

Constraints: 1) I cannot modify the exit $? part of the above script. 2) The command must be executed only after the exit $? command.

I'm not sure if there is a solution for this but any help is appreciated.


Solution

  • The typical approach is to set a trap:

    trap 'touch ~/abc.txt' 0
    

    This will invoke the touch command when the shell exits. In some shells (eg bash), the trap will also be executed if the script terminates as the result of a signal, but in others (eg dash) it will not. There is no portable way to invoke the command only if the last command was exit.