How to echo shell commands as they are executed
In a shell script, how do I echo all shell commands called and expand any variable names?
For example, given the following line:
I would like the script to run the command and display the following
The purpose is to save a log of all shell commands called and their arguments. Is there perhaps a better way of generating such a log?
set -x or
set -o xtrace expands variables and prints a little + sign before the line.
set -v or
set -o verbose does not expand the variables before printing.
set +x and
set +v to turn off the above settings.
On the first line of the script, one can put
#!/bin/sh -x (or
-v) to have the same effect as
set -x (or
-v) later in the script.
The above also works with
$ cat shl #!/bin/bash DIR=/tmp/so ls $DIR $ bash -x shl + DIR=/tmp/so + ls /tmp/so $