Bird
Raised Fist0
Bash Scriptingscripting~5 mins

trap for cleanup on exit in Bash Scripting

Choose your learning style10 modes available
Introduction
Use trap to run cleanup code automatically when your script ends or is interrupted. This helps keep things tidy and safe.
You want to delete temporary files when your script finishes or stops.
You need to close network connections or release resources before exiting.
You want to show a goodbye message or log info when the script ends.
You want to handle user pressing Ctrl+C to stop the script safely.
Syntax
Bash Scripting
trap 'commands_to_run' signals
commands_to_run is the code you want to execute on exit or signal.
signals are events like EXIT (script ends) or INT (Ctrl+C).
Examples
Runs 'echo Cleanup done' when the script finishes normally or by exit.
Bash Scripting
trap 'echo Cleanup done' EXIT
Deletes a temporary file when the script ends.
Bash Scripting
trap 'rm -f /tmp/tempfile' EXIT
Prints a message and exits when you press Ctrl+C.
Bash Scripting
trap 'echo Interrupted; exit' INT
Sample Program
This script creates a temp file, sets a trap to delete it when the script ends, then does some work. The cleanup runs automatically on exit.
Bash Scripting
#!/bin/bash

# Create a temp file
tempfile="/tmp/mytempfile.txt"
touch "$tempfile"
echo "Temp file created: $tempfile"

# Define cleanup function
cleanup() {
  echo "Cleaning up..."
  rm -f "$tempfile"
  echo "Cleanup done."
}

# Set trap to call cleanup on script exit
trap cleanup EXIT

# Simulate work
echo "Doing some work..."
sleep 2

echo "Script finished."
OutputSuccess
Important Notes
The EXIT signal runs the trap code no matter how the script ends (normal exit, error, or Ctrl+C).
You can define a function for cleanup and call it in trap for cleaner code.
Use trap to avoid leaving temporary files or resources behind.
Summary
trap runs commands when your script exits or receives signals.
Use it to clean up files, close connections, or show messages.
It helps keep your system clean and your scripts safe.

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