Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

How can I get to stdout all commands that run in bash script?

That is output must contain commands output AND commands themselves.

I found

#!/bin/bash -x

but this is not exactly the same because instead of

 mysql -v dbname < dump.sql | grep "CREATE TABLE"

it shows

+ mysql -v dbname
+ grep 'CREATE TABLE'
share|improve this question
add comment

2 Answers 2

up vote 10 down vote accepted

Use bash -v.

This is the script:

#!/bin/bash -v

echo "Hello, World" | sed 's|Hello|Goodbye|'

echo "Done."

This is the output:

#!/bin/bash -v

echo "Hello, World" | sed 's|Hello|Goodbye|'
Goodbye, World

echo "Done."
Done.

Unfortunately, there is no special marker like PS4 for printing expanded commands. You could combine both though to quickly identify commands:

#!/bin/bash -vx

echo "Hello, World" | sed 's|Hello|Goodbye|'
+ echo 'Hello, World'
+ sed 's|Hello|Goodbye|'
Goodbye, World

echo "Done."
+ echo Done.
Done.
share|improve this answer
add comment

set -x is other way of doing it.

$ cat a.sh
#!/bin/bash

set -x
echo "Hello, World" | sed 's|Hello|Goodbye|'
echo "Done."

Output will be:

sh a.sh
+ echo 'Hello, World'
+ sed 's|Hello|Goodbye|'
Goodbye, World
+ echo Done.
Done.
share|improve this answer
    
Which is kind of what the OP dismissed as useless right in his question... –  Daniel Beck Feb 7 '12 at 18:12
    
@Ashok Could you please explain? I can't see the difference: here p.s.: GNU bash, version 4.1.5(1)-release (i486-pc-linux-gnu) Ubuntu 10.04.3 –  Putnik Feb 8 '12 at 13:49
    
@Putnik It's the same basic thing, but you can set -x anywhere in the script, and even deactivate it again. So if you only want it on the echo "Done" line, put set -x just before that one. –  Daniel Beck Feb 8 '12 at 15:09
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.