나는 이해 dash
"모델"셸입니다 - 최근에 잘 작성되었으며 POSIX 셸에 필요한 것만 구현합니다. 쉘과 같은 프로그램의 "추적"이 어떻게 수행되는지를 이해하기 위해 대시 소스 코드를 살펴 보았습니다.
대시의 "추적"은 다음과 같이 컴파일하여 수행됩니다. DEBUG
정의되고 호출되는 -o debug
. 그렇게하면 파일 trace
~와 함께 열린다. fopen
무엇에 관한 정보가 쏟아져 나오는지 dash
그것이 달릴 때하고있다.
전체 메카니즘을 제외하면 나에게는 "완벽하게 쓰여진"껍질에서도 작동하지 않는 것처럼 보입니다. 쉘 스크립트에서 이것을 가지고 있다면 :
exec 3>&1
그 이후의 모든 정보는 즉시 더 이상 파일에 덤프되지 않습니다. trace
그러나 위로 감는다. stdout
. 그 이유는 fopen
전화 open
아마도 파일 기술자 3을 반환 할 것입니다.
이것은 인위적인 사례가 아닙니다. 실세계에서 일반적으로 사용되는 스크립트가 있습니다.
exec
번호 >&1
(나는 2 개의 autotools에서 그것을 보았다. configure
스크립트 : IP Infusion 및 Kerberos 소프트웨어 용).
그렇다면 쉘을 어떻게 디버깅 / 추적 할 수 있습니까?
(나는 셸 외부의 도구를 찾고 있지 않다. 셸과 같은 프로그램 내에서 추적 할 올바른 방법이 무엇인지 알고 싶다. 일반적으로 가능하지 않은가?)