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.
To end a shell script and set its exit status, use the exit command. Give exit the exit status that your script should have. If it has no explicit status, it will exit with the status of the last command run.
Use return . The return bash builtin will exit the sourced script without stopping the calling (parent/sourcing) script. Causes a function to stop executing and return the value specified by n to its caller.
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
.
I don't know why you want to do something like that but maybe try something like this: wrap your script in another one. In your parent script evaluate your child script with command like eval or source, then extract from your child script last command and execute it separately same way.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With