Bird
Raised Fist0
Bash Scriptingscripting~10 mins

trap for cleanup on exit in Bash Scripting - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - trap for cleanup on exit
Start Script
↓
Set trap for EXIT
↓
Run main commands
↓
Script ends or interrupted
↓
Trap triggers cleanup function
↓
Cleanup actions run
↓
Exit script
The script sets a trap to run cleanup code when it exits normally or is interrupted.
Execution Sample
Bash Scripting
cleanup() {
  echo "Cleaning up..."
}
trap cleanup EXIT

echo "Script running"
This script sets a trap to run the cleanup function when the script exits.
Execution Table
StepActionOutputTrap TriggeredNotes
1Define cleanup functionNoFunction ready but not run
2Set trap on EXIT to cleanupNoTrap set for script exit
3Print 'Script running'Script runningNoMain script running
4Script ends normallyYesTrap triggers cleanup
5Run cleanup functionCleaning up...YesCleanup runs on exit
💡 Script ends, trap on EXIT triggers cleanup function
Variable Tracker
VariableStartAfter Step 3After Step 5
cleanup functionDefinedDefinedExecuted
Key Moments - 2 Insights
Why does the cleanup function run even though we never call it explicitly?
Because the trap command links the cleanup function to the EXIT signal, so it runs automatically when the script ends (see execution_table step 4 and 5).
What happens if the script is interrupted with Ctrl+C?
The EXIT trap still triggers the cleanup function, ensuring cleanup runs on interruption as well.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is printed at step 3?
ANothing
B"Cleaning up..."
C"Script running"
D"Exit script"
💡 Hint
Check the Output column at step 3 in the execution_table.
At which step does the cleanup function run?
AStep 2
BStep 5
CStep 3
DStep 1
💡 Hint
Look at the Trap Triggered and Output columns in the execution_table.
If we remove the trap command, what changes in the execution?
ACleanup function never runs unless called explicitly
BCleanup function runs automatically on exit
CScript prints "Cleaning up..." before "Script running"
DScript will not print anything
💡 Hint
Refer to the role of trap in linking cleanup to script exit in the concept_flow.
Concept Snapshot
trap command links signals to functions
Use 'trap cleanup EXIT' to run cleanup on script exit
Cleanup runs on normal exit or interruption
Ensures resources are freed or temp files removed
No explicit call needed for cleanup function
Full Transcript
This script defines a cleanup function and sets a trap to run it when the script exits. The trap command listens for the EXIT signal, which happens when the script finishes or is interrupted. When the script runs, it prints 'Script running'. When the script ends, the trap triggers the cleanup function, which prints 'Cleaning up...'. This ensures cleanup code always runs without needing explicit calls.

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

  1. Step 1: Understand the role of trap

    The trap command is designed to catch signals or script exit events and run commands in response.
  2. 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.
  3. Final Answer:

    To run specific commands when the script exits or receives signals -> Option C
  4. 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

  1. 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.
  2. 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'.
  3. Final Answer:

    trap 'cleanup' EXIT -> Option D
  4. 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

  1. Step 1: Understand script flow

    The script prints "Script is running" first, then exits.
  2. Step 2: Effect of trap on EXIT

    On exit, the cleanup function runs, printing "Cleaning up temp files" after the first echo.
  3. Final Answer:

    Script is running\nCleaning up temp files -> Option B
  4. 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:
#!/bin/bash
trap cleanup EXIT

cleanup() {
  echo "Cleaning up"
}
medium
A. No error, script is correct
B. EXIT signal is invalid
C. trap command missing quotes around cleanup
D. cleanup function is defined after trap command

Solution

  1. Step 1: Check trap command syntax

    For simple function names like cleanup, quotes are not required around the command in trap.
  2. 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.
  3. Final Answer:

    No error, script is correct -> Option A
  4. 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

  1. Step 1: Understand trap for multiple signals

    To catch script exit and interruptions, use signals EXIT, INT, and TERM together.
  2. 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.
  3. Final Answer:

    trap 'rm -f /tmp/mytempfile' EXIT INT TERM -> Option A
  4. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard