📖 Scenario: You are writing a bash script that creates a temporary file to store some data. To keep your system clean, you want to make sure this temporary file is deleted automatically when the script finishes or if it is interrupted.
🎯 Goal: Build a bash script that creates a temporary file, sets up a trap to delete this file when the script exits, and then prints a message confirming the cleanup.
📋 What You'll Learn
Create a variable tempfile with the value /tmp/mytempfile.txt
Set up a trap command to delete $tempfile on script exit
Create the temporary file using touch
Print Cleanup done! after the file is deleted
💡 Why This Matters
🌍 Real World
Scripts often create temporary files or resources that must be cleaned up to avoid clutter or security risks. Using trap ensures cleanup happens even if the script is interrupted.
💼 Career
Knowing how to use trap for cleanup is important for system administrators, DevOps engineers, and anyone writing reliable shell scripts that manage temporary resources.
Progress0 / 4 steps
1
Create the temporary file variable
Create a variable called tempfile and set it to the string /tmp/mytempfile.txt.
Bash Scripting
Hint
Use tempfile=/tmp/mytempfile.txt to assign the path.
2
Set up the trap for cleanup
Add a trap command that runs rm -f "$tempfile" and then echo "Cleanup done!" when the script exits.
Bash Scripting
Hint
Use trap 'rm -f "$tempfile"; echo "Cleanup done!"' EXIT to run commands on exit.
3
Create the temporary file
Use the touch command to create the file at the path stored in tempfile.
Bash Scripting
Hint
Use touch "$tempfile" to create the file.
4
Test the cleanup on exit
Run the script and observe that when it finishes, it prints Cleanup done! and the temporary file is deleted.
Bash Scripting
Hint
Run the script normally. The message Cleanup done! should appear when it exits.
Practice
(1/5)
1. What is the main purpose of using trap in a bash script?
easy
A. To define functions inside the script
B. To create loops that repeat commands
C. To run specific commands when the script exits or receives signals
D. To declare variables with default values
Solution
Step 1: Understand the role of trap
The trap command is designed to catch signals or script exit events and run commands in response.
Step 2: Compare options with trap's purpose
Options B, C, and D describe other bash features unrelated to trap. Only To run specific commands when the script exits or receives signals correctly describes its purpose.
Final Answer:
To run specific commands when the script exits or receives signals -> Option C
Quick Check:
trap runs commands on exit/signals = A [OK]
Hint: Trap runs cleanup commands on exit or signals [OK]
Common Mistakes:
Confusing trap with loops or functions
Thinking trap declares variables
Assuming trap runs commands continuously
2. Which of the following is the correct syntax to run cleanup function on script exit using trap?
easy
A. trap EXIT cleanup
B. trap 'cleanup' on EXIT
C. trap cleanup on EXIT
D. trap 'cleanup' EXIT
Solution
Step 1: Recall trap syntax for commands
The command(s) to run must be quoted as a string, followed by the signal or event name.
Step 2: Check each option's syntax
trap 'cleanup' EXIT correctly quotes the command and uses the signal EXIT. trap EXIT cleanup places the signal before the command (wrong order). Options C and D use incorrect keywords like 'on'.
Final Answer:
trap 'cleanup' EXIT -> Option D
Quick Check:
trap 'command' SIGNAL = B [OK]
Hint: Always quote commands in trap before the signal [OK]
Common Mistakes:
Omitting quotes around commands
Using 'on' keyword incorrectly
Placing signal before command
3. What will be the output of this script?
#!/bin/bash
cleanup() {
echo "Cleaning up temp files"
}
trap 'cleanup' EXIT
echo "Script is running"
medium
A. Script is running
B. Script is running\nCleaning up temp files
C. No output
D. Cleaning up temp files
Solution
Step 1: Understand script flow
The script prints "Script is running" first, then exits.
Step 2: Effect of trap on EXIT
On exit, the cleanup function runs, printing "Cleaning up temp files" after the first echo.
Final Answer:
Script is running\nCleaning up temp files -> Option B
Quick Check:
trap runs cleanup on exit, so both lines print [OK]
Hint: trap runs cleanup after script finishes [OK]
Common Mistakes:
Thinking trap runs before script output
Expecting only cleanup message
Ignoring trap on EXIT
4. Identify the error in this script snippet that uses trap for cleanup:
For simple function names like cleanup, quotes are not required around the command in trap.
Step 2: Analyze script order and signals
Defining cleanup after trap is allowed because bash processes function definitions before executing traps. EXIT is valid. No syntax errors present.
Final Answer:
No error, script is correct -> Option A
Quick Check:
unquoted function name OK, post-definition OK [OK]
Hint: trap accepts unquoted simple function names [OK]
Common Mistakes:
Thinking functions must be defined before trap
Believing EXIT is an invalid signal
Assuming quotes are required around simple commands
5. You want to ensure a temporary file /tmp/mytempfile is deleted when your bash script exits, even if interrupted. Which trap command correctly achieves this?
hard
A. trap 'rm -f /tmp/mytempfile' EXIT INT TERM
B. trap rm -f /tmp/mytempfile EXIT INT TERM
C. trap 'rm -f /tmp/mytempfile' ONEXIT
D. trap 'rm -f /tmp/mytempfile' EXIT SIGNAL
Solution
Step 1: Understand trap for multiple signals
To catch script exit and interruptions, use signals EXIT, INT, and TERM together.
Step 2: Check syntax correctness
Commands must be quoted. trap 'rm -f /tmp/mytempfile' EXIT INT TERM quotes the command and lists valid signals. Options B misses quotes, C uses invalid signal ONEXIT, D uses invalid SIGNAL keyword.
Final Answer:
trap 'rm -f /tmp/mytempfile' EXIT INT TERM -> Option A
Quick Check:
trap 'command' SIGNALS with quotes = A [OK]
Hint: Quote commands and list all signals to catch [OK]
Common Mistakes:
Missing quotes around commands
Using invalid signal names
Not including INT and TERM for interrupts
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.