bash debugging

Updated: 03 May 2023

see https://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html

Start subshell with -x option, which will run the entire script in debug mode. Traces of each command plus its arguments are printed to standard output after the commands have been expanded but before they are executed.

bash -x script1.sh

Debugging can be activated for a portion of the script

set -x			# activate debugging from here
call_my_func
set +x			# stop debugging from here

Other useful bash options

Short notation Long notation Result
set -v set -o verbose Prints shell input lines as they are read.
set -x set -o xtrace Print command traces before executing command.

Alternatively, these modes can be specified in the script itself, by adding the desired options to the first line shell declaration. Options can be combined, as is usually the case with UNIX commands

#!/bin/bash -xv

Examples of using echo for debugging

echo "debug message: now attempting to start w command"; w

echo "Variable VARNAME is now set to $VARNAME."

bash export

Updated: 28 December 2022

See https://www.digitalocean.com/community/tutorials/export-command-linux

Export is a built-in command of the Bash shell. It is used to mark variables and functions to be passed to child processes.

Display all exported variables

export

View all exported variables on the current shell

export -p

Declare and export a variable

export STUDENT=Divya

Display a variable

printenv STUDENT

Remove an environment variable

unset STUDENT

bash

Updated: 21 July 2023

Documentation

Bash guide for beginners
Bash reference manual
Bash reference manual

Miscellaneous

Shorten prompt in current terminal
PS1='\u:\W\$ '

Exit status of last command
echo $?

Repeat a command n times
for run in {1..100}; do command; sleep 5; done

Run A and then B, regardless of success of A
A; B

Run B if and only if A succeeded
A && B

Run B if and only if A failed
A || B

Run A in background.
A &