제3자가 정의한 많은 쉘 스크립트를 실행해야 합니다. 따라서 콘텐츠나 사용 중인 셸(bash 대 dash)을 변경할 수 없습니다(또는 변경하고 싶지 않습니다). Shebang을 통해 이를 지정할 수도 있고 지정하지 않을 수도 있습니다.
그러나 실행된 모든 명령을 표준 출력으로 인쇄하고 싶습니다. bash의 경우 env SHELLOPTS=xtrace ./script.sh
. shebang의 유무에 관계없이 #!/bin/bash
효과 가 없습니다.#!/bin/dash
대시에 동등한 환경 변수를 사용할 수 있나요? 스크립트 상단에 추가하면 set -x
두 쉘 모두에서 작동한다는 것을 알고 있지만 가능하면 이를 피하고 싶습니다.
답변1
일반적인 대체품은 없습니다.
xtrace
최상위 스크립트만 사용하는 특별한 경우에는 다음을 사용할 수 있습니다.
dash -x ./script.sh
스크립트를 편집하고 싶지 않은 경우. 당신이 할 수 있는 또 다른 일은 다음과 같은 래퍼 스크립트를 만드는 것입니다.
#!/bin/dash
set -x
. ./script.sh
의견에서 당신은 사물을 대시와 연결하고 싶지 않다고 말했습니다. 예를 들어 xtrace라는 프로그램을 작성할 수 있습니다.
#!/bin/bash
where=$(command -v "$1")
read line1 < "$where"
case "$line1" in
(*"dash")
# Assume if it mention dash on first line then it is a dash script
exec /bin/dash -x "$@" ;;
(*)
SHELLOPTS=xtrace exec "$@" ;;
esac
그런 다음 이를 사용 xtrace ./script.sh
하여 실행합니다.