bash 함수의 정의 찾기 포함 된 일부 파일에서 가져온 bash

나는 많은 레거시 쉘 스크립트 마술이있는 환경에서 일합니다. 커맨드 라인에서 많이 사용되는 것 중 하나는 내 파일 .bash_profile에 포함 된 파일에서 포함 된 일부 파일에서 가져온 bash 함수입니다. 5 가지 레벨의 포함을 통해 추적하지 않고 이러한 함수의 정의 위치를 ​​정의하거나 더 잘 정의 할 수있는 방법이 있습니까?



답변

함수 정의를 얻으려면 :

type -a function_name


답변

foo라는 함수가 있다고 가정하면 아래 명령은 함수 정의의 위치를 ​​가져옵니다. 즉 함수가 정의 된 파일의 이름과 함수가 해당 파일 내에 정의 된 행 번호를 가져옵니다. .

# Turn on extended shell debugging
shopt -s extdebug

# Dump the function's name, line number and fully qualified source file  
declare -F foo

# Turn off extended shell debugging
shopt -u extdebug

필자의 경우 이러한 명령의 출력은 다음과 같습니다.

foo 32 /source/private/main/developer/cue.pub.sh


답변

함수의 정의를 보려면 (원산지가 아니라) 다음을 사용하십시오.

declare -f <functionname>


답변

bash -xbash가 시작될 때 실행중인 것을 덤프하여 더 쉽게 추적 할 수 있습니다. 새로 열린 쉘을 종료하는 것을 잊지 마십시오.


답변

다른 방법으로, 요즘 더 간단하게 찾을 수 있습니다.

  which <functionname>

(이것은 또한 별칭인지 스크립트인지를 보여 주지만 별칭의 출처를 추적하지는 않습니다)


답변