equivalent "echo on" for linux?

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'

3 Answers

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.

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.
4

set -x is an equivalent of "echo on"

set +x is an equivalent of "echo off"

1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like