Bird
Raised Fist0
Bash Scriptingscripting~10 mins

Temporary files (mktemp) in Bash Scripting - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Temporary files (mktemp)
Start script
↓
Call mktemp
↓
Create unique temp file
↓
Return temp file path
↓
Use temp file
↓
Delete temp file
↓
End script
The script calls mktemp to create a unique temporary file, uses it, then deletes it before ending.
Execution Sample
Bash Scripting
tempfile=$(mktemp)
echo "Hello" > "$tempfile"
cat "$tempfile"
rm "$tempfile"
Creates a temp file, writes 'Hello' to it, shows the content, then deletes the file.
Execution Table
StepCommandActionResultOutput
1tempfile=$(mktemp)Create unique temp file/tmp/tmp.abcd1234
2echo "Hello" > "$tempfile"Write 'Hello' to temp fileFile /tmp/tmp.abcd1234 contains 'Hello'
3cat "$tempfile"Read and display temp file contentHello
4rm "$tempfile"Delete temp fileFile /tmp/tmp.abcd1234 removed
💡 Temp file deleted, script ends
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4
tempfileunset/tmp/tmp.abcd1234/tmp/tmp.abcd1234/tmp/tmp.abcd1234unset
Key Moments - 3 Insights
Why do we use $(mktemp) instead of a fixed filename?
Using $(mktemp) ensures the filename is unique and avoids overwriting or conflicts, as shown in Step 1 of the execution_table.
What happens if we try to read the temp file after deleting it?
After Step 4, the temp file is deleted, so reading it would fail because the file no longer exists.
Why do we quote "$tempfile" in commands?
Quoting "$tempfile" prevents errors if the filename contains spaces or special characters, ensuring commands work correctly.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of 'tempfile' after Step 1?
Aunset
B/tmp/tmp.abcd1234
C/tmp/tempfile
DHello
💡 Hint
Check the 'Result' column in Step 1 of the execution_table.
At which step is the content 'Hello' displayed on the screen?
AStep 3
BStep 2
CStep 4
DStep 1
💡 Hint
Look at the 'Output' column in the execution_table.
If we skip the 'rm "$tempfile"' command, what happens to the temp file?
AIt becomes unreadable
BIt is automatically deleted
CIt remains on disk, possibly causing clutter
DIt is renamed
💡 Hint
Refer to Step 4 in the execution_table and variable_tracker for file deletion.
Concept Snapshot
Use mktemp to create a unique temporary file safely.
Assign its path to a variable: tempfile=$(mktemp).
Use "$tempfile" to read/write data.
Delete the file with rm "$tempfile" when done.
Always quote variables to avoid errors.
This prevents filename conflicts and security issues.
Full Transcript
This example shows how to create and use a temporary file in bash using mktemp. First, the script calls mktemp to create a unique file and stores its path in the variable 'tempfile'. Then it writes the word 'Hello' into this file. Next, it reads and displays the content of the file, which outputs 'Hello'. Finally, the script deletes the temporary file to clean up. Quoting the variable ensures commands work even if the filename has spaces. Using mktemp avoids overwriting files and keeps the system safe.

Practice

(1/5)
1. What is the main purpose of the mktemp command in bash scripting?
easy
A. To permanently delete files from the system
B. To change file permissions
C. To list all files in the current directory
D. To create a unique temporary file or directory safely

Solution

  1. Step 1: Understand the function of mktemp

    mktemp is designed to create temporary files or directories with unique names to avoid conflicts.
  2. Step 2: Compare with other options

    Options A, C, and D describe unrelated commands or actions not related to mktemp.
  3. Final Answer:

    To create a unique temporary file or directory safely -> Option D
  4. Quick Check:

    mktemp = unique temp file creation [OK]
Hint: Remember: mktemp = safe unique temp file creation [OK]
Common Mistakes:
  • Confusing mktemp with file deletion commands
  • Thinking mktemp lists files
  • Assuming mktemp changes file permissions
2. Which of the following is the correct syntax to create a temporary file using mktemp in bash?
easy
A. mktemp
B. mktemp -d
C. mktemp --remove
D. mktemp -r

Solution

  1. Step 1: Identify basic mktemp usage

    Running mktemp alone creates a temporary file with a unique name.
  2. Step 2: Understand options

    -d creates a temporary directory, not a file. Options --remove and -r are invalid or not standard.
  3. Final Answer:

    mktemp -> Option A
  4. Quick Check:

    Basic mktemp = create temp file [OK]
Hint: Use plain mktemp to create a temp file quickly [OK]
Common Mistakes:
  • Using -d when a file is needed, creates directory instead
  • Using non-existent options like --remove or -r
  • Confusing directory creation with file creation
3. What will be the output of the following bash script snippet?
tempfile=$(mktemp)
echo $tempfile
rm $tempfile
medium
A. Creates a directory instead of a file
B. Prints a unique temporary filename, then deletes it
C. Prints the string 'tempfile' literally
D. Prints an error because tempfile is empty

Solution

  1. Step 1: Analyze mktemp usage

    mktemp creates a unique temporary file and returns its path, stored in tempfile.
  2. Step 2: Understand echo and rm commands

    echo $tempfile prints the temporary filename. rm $tempfile deletes the file to keep the system clean.
  3. Final Answer:

    Prints a unique temporary filename, then deletes it -> Option B
  4. Quick Check:

    mktemp creates file, echo prints, rm deletes [OK]
Hint: mktemp returns filename; echo prints it; rm cleans up [OK]
Common Mistakes:
  • Expecting literal 'tempfile' output instead of variable value
  • Thinking tempfile is empty or unset
  • Confusing file creation with directory creation
4. Identify the error in this script snippet:
tempfile=mktemp
echo $tempfile
rm $tempfile
medium
A. Missing parentheses to execute mktemp command
B. rm command should be before echo
C. mktemp should be quoted
D. No error, script works fine

Solution

  1. Step 1: Check variable assignment

    Assigning tempfile=mktemp sets the string 'mktemp', not the command output.
  2. Step 2: Correct command substitution

    Use tempfile=$(mktemp) to run the command and assign its output.
  3. Final Answer:

    Missing parentheses to execute mktemp command -> Option A
  4. Quick Check:

    Use $(mktemp) to assign command output [OK]
Hint: Use $(command) to assign output, not plain text [OK]
Common Mistakes:
  • Assigning command name as string instead of output
  • Forgetting $() or backticks for command substitution
  • Thinking rm order affects error here
5. You want to create a temporary directory for your script to store files safely and remove it after use. Which command correctly creates this directory and stores its path in a variable named tempdir?
hard
A. tempdir=$(mktemp)
B. tempdir=mktemp -d
C. tempdir=$(mktemp -d)
D. tempdir=mktemp -f

Solution

  1. Step 1: Understand -d option in mktemp

    The -d option tells mktemp to create a temporary directory instead of a file.
  2. Step 2: Correct command substitution syntax

    Use $(mktemp -d) to execute the command and assign the directory path to tempdir.
  3. Final Answer:

    tempdir=$(mktemp -d) -> Option C
  4. Quick Check:

    Use $(mktemp -d) for temp directory creation [OK]
Hint: Use $(mktemp -d) to create and assign temp directory [OK]
Common Mistakes:
  • Assigning command as string without $()
  • Using mktemp without -d creates a file, not directory
  • Using invalid options like -f
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