еквівалент "відлуння" для Linux?


27

Як я можу домогтися складання всіх команд, що виконуються в bash script?

Тобто вихід повинен містити команди виводу AND самих команд.

я знайшов

#!/bin/bash -x

але це не зовсім те саме, що замість цього

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

це показує

+ mysql -v dbname
+ grep 'CREATE TABLE'

Відповіді:


29

Використовуйте 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.

12

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.

1
Що таке те, що ОП визнала марним правом у своєму питанні ...
Даніель Бек

@Ashok Чи можете ви поясніть, будь ласка? Я не можу бачити різницю: тут PS: GNU Баш, версія 4.1.5 (1) -release (i486-ПК-Linux-гну) Ubuntu 10.04.3
Putnik

1
@Putnik Це те саме основне, але ви можете set -xбудь-де в скрипті і навіть знову відключити його. Тож якщо ви хочете лише це на echo "Done"лінії, поставте set -xпрямо перед цим.
Даніель Бек
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.