The question is published on by Tutorial Guruji team.
What are / is the significance of +
and ++
at the beginning of bash
debug (set -x
) output?
The original text looks like this
++ delete + exitstatus=0 + '[' 0 = 0 ']' ++ delete + whiptail --title 'Command output 1311' --separate-output --scrolltext --msgbox '/usr/bin/raspi-config-DEBUG.sh: line 1311: delete: command not found' 17 80 10 + echo '1317 done printing choice to stdout'
Answer
The +
is the PS4
prompt (just like PS1
usually holds $
or some variation thereof, which is the default interactive prompt). It is outputted before each command executed when tracing is enabled with set -x
.
The bash
manual says this:
PS4
The value of this parameter is expanded as with
PS1
and the value is printed before each command bash displays during an execution trace. The first character ofPS4
is replicated multiple times, as necessary, to indicate multiple levels of indirection. The default is+
.
The multiple +
that you may see are due to commands being executed in subshells.
Example showing three levels of subshells:
$ cat script.sh #!/bin/bash echo "$( echo "$( echo hi )" )"
$ bash -x script.sh +++ echo hi ++ echo hi + echo hi hi