![Linux에 해당하는 "echo on"이 있습니까?](https://rvso.com/image/1304086/Linux%EC%97%90%20%ED%95%B4%EB%8B%B9%ED%95%98%EB%8A%94%20%22echo%20on%22%EC%9D%B4%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
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
"에코 꺼짐"과 동일합니다.