π Bash: Debugging β Use set -x, -n, and -v to Troubleshoot Scripts
π§² Introduction to Bash Debugging β Master set -x, set -n, and set -v
Debugging is a crucial part of writing reliable Bash scripts. Bash provides built-in options like set -x, set -n, and set -v to help you trace script execution, detect syntax errors, and understand how your script behaves in real-time.
These debugging flags are simple yet powerful tools to make your script development faster, more predictable, and less error-prone.
π― In this article, youβll learn:
- What set -x,-n, and-vdo in Bash
- How to enable and disable these debugging modes
- Example outputs to see how each works
- Best practices for script debugging
π Debugging Flags Overview
| Flag | Purpose | 
|---|---|
| -x | Print each command as itβs executed (trace) | 
| -n | Parse-only mode (check syntax, donβt run) | 
| -v | Print shell input lines as theyβre read | 
You can enable them using either:
set -x     # or
set -n     # or
set -v
Or combine them:
set -xv
To turn them off:
set +x     # disables tracing
πΎ set -x β Trace Command Execution
Shows each command and its arguments as they execute. Great for spotting logic errors.
π§ͺ Example:
#!/bin/bash
set -x
name="Vaibhav"
echo "Hello, $name"
β Output:
+ name=Vaibhav
+ echo 'Hello, Vaibhav'
Hello, Vaibhav
π§ Helpful for checking variable expansion and command flow.
π§  set -n β Check Syntax Without Running
Checks for syntax errors without executing any commands.
π§ͺ Example:
#!/bin/bash
set -n
echo "Start script"
echo "Missing quote
echo "Script continues"
β Output:
myscript.sh: line 4: unexpected EOF while looking for matching `"'
β οΈ Commands are not executedβthis is a safe dry-run to detect typos.
π set -v β Echo Input Lines Before Execution
Displays each line as it is read, before itβs executed. Useful for reviewing script input.
π§ͺ Example:
#!/bin/bash
set -v
echo "First"
echo "Second"
β Output:
echo "First"
First
echo "Second"
Second
π Helps understand what code the shell is reading, especially with complex logic.
π οΈ Combine Debugging Options
Use combinations for deeper insights:
set -xv   # Trace execution and input lines
π§ͺ Disable Debugging Mid-Script
set -x
echo "Tracing ON"
set +x
echo "Tracing OFF"
β Output:
+ echo 'Tracing ON'
Tracing ON
Tracing OFF
β This approach is great for isolated debugging.
β Best Practices for Debugging
| Tip | Why It Matters | 
|---|---|
| Use set -nto validate syntax | Avoid running broken logic | 
| Isolate blocks with set -x/+x | Focus debug output on suspicious code | 
| Don’t leave debug flags in prod | Keeps scripts clean and silent | 
| Use comments for toggle zones | Easier collaboration and reuse | 
π Summary β Bash Debugging Options
Bash debugging options like set -x, set -n, and set -v are essential for writing reliable and bug-free scripts. Use them wisely to trace execution, check syntax, and view inputs during development.
π Key Takeaways:
- set -xshows command execution with expanded variables
- set -nperforms a syntax-only dry run
- set -vdisplays each input line before execution
- Combine or isolate debug sections for targeted analysis
βοΈ Real-world Uses:
- Troubleshooting conditional logic or loops
- Verifying cron job behavior without execution
- Understanding input flow in complex scripts
β FAQ β Bash Debugging Options
β Can I combine multiple set flags?
β
 Yes, like set -xv to trace both input and execution.
β Does set -n execute the script?
β No. It parses the script and checks for syntax errors without running anything.
β How do I stop debugging mid-script?
β
 Use set +x or set +v to disable the corresponding mode.
β Is set -v useful without set -x?
β
 Yes. It shows whatβs being read line-by-line, which helps for flow review.
β Should I keep set -x in production scripts?
β No. It clutters output and may expose sensitive values. Use only for debugging during development.
Share Now :
