![эквивалент "echo on" для Linux?](https://rvso.com/image/1304086/%D1%8D%D0%BA%D0%B2%D0%B8%D0%B2%D0%B0%D0%BB%D0%B5%D0%BD%D1%82%20%22echo%20on%22%20%D0%B4%D0%BB%D1%8F%20Linux%3F.png)
Как мне вывести на стандартный вывод все команды, которые выполняются в скрипте bash?
То есть вывод должен содержать вывод команд И сами команды.
я нашел
#!/bin/bash -x
но это не совсем то же самое, потому что вместо
mysql -v dbname < dump.sql | grep "CREATE TABLE"
это показывает
+ mysql -v dbname
+ grep 'CREATE TABLE'
решение1
Использовать bash -v
.
Вот сценарий:
#!/bin/bash -v
echo "Hello, World" | sed 's|Hello|Goodbye|'
echo "Done."
Вот что получилось:
#!/bin/bash -v
echo "Hello, World" | sed 's|Hello|Goodbye|'
Goodbye, World
echo "Done."
Done.
К сожалению, нет специального маркера, например, PS4
для печати расширенных команд. Вы можете объединить оба, чтобы быстро идентифицировать команды:
#!/bin/bash -vx
echo "Hello, World" | sed 's|Hello|Goodbye|'
+ echo 'Hello, World'
+ sed 's|Hello|Goodbye|'
Goodbye, World
echo "Done."
+ echo Done.
Done.
решение2
set -x — это другой способ сделать то же самое.
$ cat a.sh
#!/bin/bash
set -x
echo "Hello, World" | sed 's|Hello|Goodbye|'
echo "Done."
Вывод будет следующим:
sh a.sh
+ echo 'Hello, World'
+ sed 's|Hello|Goodbye|'
Goodbye, World
+ echo Done.
Done.
решение3
set -x
является эквивалентом "эха"
set +x
эквивалентно "эхо выключено"