Эквивалентное "эхо" для Linux?
Как мне получить стандартный вывод всех команд, которые выполняются в скрипте bash?
То есть вывод должен содержать команды вывода и сами команды.
я нашел
#!/bin/bash -x
но это не совсем то же самое, потому что вместо
mysql -v dbname < dump.sql | grep "CREATE TABLE"
это показывает
+ mysql -v dbname
+ grep 'CREATE TABLE'
3 ответа
Решение
Использование 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.
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.
set -x
является эквивалентом «эхо включено»
set +x
является эквивалентом «эхо выключено»