TL;DR: When running scripts with bash -x
, use true …
instead of echo …
, to avoid duplicate output
Sometimes we use echo
to debug bash scripts, like this:
echo Beginning computation...
some_commands
result="$(something_else)"
echo "function returned $result"
Then, to aid debugging even more, we run the whole script with bash -x script.sh
.
This prints each line before it gets executed.
As a result, you will see each echo
line twice: once before it gets executed and once for echo
output, like this:
+ echo Beginning computation...
Beginning computation...
+ some_commands
+ result="$(something_else)"
+ echo function returned twnty
function returned twnty
If you don't fancy seeing duplicate lines, you can just replace echo
with true
, like this:
true Beginning computation...
some_commands
result="$(something_else)"
true "function returned $result"
true
accepts any number of arguments and simply ignores them.
But bash -x script.sh
output will look nicer:
+ true Beginning computation...
+ some_commands
+ result="$(something_else)"
+ true function returned twnty
Moreover, if you like separating different parts of your script with comment lines like this:
part_one
# ================
part_two
Then just replacing first comment character #
with true
will forward these lines to bash -x
log:
$ cat sctipt.sh
part_one
true ================
part_two
$ bash -x sctipt.sh
+ part_one
+ true ================
+ part_two
Thanks Vratislav for this trick!