
Bash 스크립트에서 실행되는 모든 명령을 stdout으로 가져오려면 어떻게 해야 합니까?
즉, 출력에는 명령 출력과 명령 자체가 포함되어야 합니다.
나는 찾았다
#!/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
"에코 꺼짐"과 동일합니다.