0
0
Bash Scriptingscripting~20 mins

Debugging with PS4 in Bash Scripting - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
PS4 Debugging Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
2:00remaining
What is the output of this script with PS4 set?
Consider this bash script with PS4 set to show line numbers. What will be the first line printed when running with bash -x script.sh?
Bash Scripting
#!/bin/bash
PS4='+$LINENO: '

function greet() {
  echo "Hello, $1"
}
greet World
A
+2: function greet() {
+3: greet World
Hello, World
B
+3: greet World
+4: echo Hello, World
Hello, World
C
+4: greet World
+5: echo Hello, World
Hello, World
D
+1: PS4='+$LINENO: '
+2: function greet() {
+3: echo Hello, World
Hello, World
Attempts:
2 left
💡 Hint
Remember PS4 shows the line number of the command being executed.
📝 Syntax
intermediate
1:30remaining
Which PS4 assignment is valid to show timestamp before each command?
You want to set PS4 to show the current time in HH:MM:SS format before each command in bash debugging. Which assignment is valid?
APS4='$(date +"%T") '
BPS4='$(date +%T) '
CPS4='$(date +%T)\n'
DPS4='$(date +%T)\t'
Attempts:
2 left
💡 Hint
Check how to properly quote the format string inside date command.
🔧 Debug
advanced
2:30remaining
Why does this PS4 setting cause no output in bash -x?
Given this script: #!/bin/bash PS4='+$LINENO: ' set -x for i in {1..3}; do echo $i PS4='+$LINENO: ' done Why does the debug output not show line numbers inside the loop?
Bash Scripting
#!/bin/bash
PS4='+$LINENO: '
set -x

for i in {1..3}; do
  echo $i
  PS4='+$LINENO: '
done
ABecause PS4 is expanded once when set, so changing it inside the loop has no effect
BBecause set -x disables PS4 inside loops
CBecause PS4 is reset inside the loop after set -x, so it doesn't apply to commands inside the loop
DBecause the shell ignores PS4 when used inside loops
Attempts:
2 left
💡 Hint
Think about when PS4 is expanded and how set -x uses it.
🚀 Application
advanced
2:00remaining
How to modify PS4 to show function names in bash debug output?
You want your bash debug output to include the function name before each command. Which PS4 setting achieves this?
APS4='+${FUNCNAME[0]}: '
BPS4='+${FUNCNAME}: '
CPS4='+${FUNCNAME[-1]}: '
DPS4='+${FUNCNAME[1]}: '
Attempts:
2 left
💡 Hint
FUNCNAME array holds the call stack, index 0 is current function.
🧠 Conceptual
expert
3:00remaining
What is the effect of this PS4 setting with command substitution?
Consider this PS4 setting: PS4='+$(date +"%T"): ' What happens when you run bash -x script.sh with this PS4?
AThe timestamp is ignored and PS4 shows only '+'
BThe timestamp is evaluated before each command, showing current time dynamically
CThe timestamp is evaluated once when PS4 is set, so all debug lines show the same time
DThe script fails with syntax error due to command substitution in PS4
Attempts:
2 left
💡 Hint
Think about when command substitution runs in variable assignments.