리눅스에 해당하는 "에코 온"?


27

bash 스크립트에서 실행되는 모든 명령을 어떻게 stdout 할 수 있습니까?

출력은 명령 출력 및 명령 자체를 포함해야합니다.

나는 찾았다

#!/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
그의 질문에 OP가 쓸모없는 것으로 기각 한 것은 다음과 같습니다.
Daniel Beck

@Ashok 설명해 주시겠습니까? 차이점을 볼 수 없습니다 : 여기 ps : GNU bash, 버전 4.1.5 (1)-릴리스 (i486-pc-linux-gnu) 우분투 10.04.3
Putnik

1
@Putnik 동일한 기본 사항이지만 set -x스크립트의 어느 곳에서나 다시 비활성화 할 수 있습니다. 따라서 echo "Done"라인 에 원하는 경우 해당 라인 set -x바로 앞에 놓으십시오 .
Daniel Beck
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.