From 877537228ff235688bedab80c37f2c9737440014 Mon Sep 17 00:00:00 2001 From: jbranchaud Date: Fri, 15 Nov 2024 19:55:22 -0600 Subject: [PATCH] Add Gracefully Exit A Script With Trap as a Unix TIL --- README.md | 3 ++- unix/gracefully-exit-a-script-with-trap.md | 29 ++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 unix/gracefully-exit-a-script-with-trap.md diff --git a/README.md b/README.md index 722ec8a..7133bb7 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ pairing with smart people at Hashrocket. For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186). -_1507 TILs and counting..._ +_1508 TILs and counting..._ --- @@ -1465,6 +1465,7 @@ _1507 TILs and counting..._ - [Global Substitution On The Previous Command](unix/global-substitution-on-the-previous-command.md) - [Globbing For All Directories In Zsh](unix/globbing-for-all-directories-in-zsh.md) - [Globbing For Filenames In Zsh](unix/globbing-for-filenames-in-zsh.md) +- [Gracefully Exit A Script With Trap](unix/gracefully-exit-a-script-with-trap.md) - [Grep For Files Without A Match](unix/grep-for-files-without-a-match.md) - [Grep For Files With Multiple Matches](unix/grep-for-files-with-multiple-matches.md) - [Grep For Multiple Patterns](unix/grep-for-multiple-patterns.md) diff --git a/unix/gracefully-exit-a-script-with-trap.md b/unix/gracefully-exit-a-script-with-trap.md new file mode 100644 index 0000000..81d9af1 --- /dev/null +++ b/unix/gracefully-exit-a-script-with-trap.md @@ -0,0 +1,29 @@ +# Gracefully Exit A Script With Trap + +With `trap` you can intercept signals that would cause your script to exit and +then inject some additional behavior. Perhaps you want to make sure the script +cleans up after itself before it exists. + +During this script's execution, it creates a file in the filesystem. It would +be nice to make sure that no matter path this script ends up down that it will +clean up after itself as it exits. We set up a `trap` that looks for the `EXIT` +signal to do this. + +```bash +# Set up trap +trap 'echo "Cleaning up temp files"; rm -f *.tmp' EXIT + +# Create temporary file +echo "test data" > work.tmp + +# Do some work +cat work.tmp + +# Trap will clean up on exit +``` + +Whatever is in quotes is what the trap will execute when it is triggered. The +following one or more signals are what the trap listens for, in this case +`EXIT`. + +[source](https://tldp.org/LDP/Bash-Beginners-Guide/html/sect_12_02.html)