2011-08-02 8 views
181

bash에서 bash 함수의 정의를 보는 방법이 있습니까?bash에서 함수 정의를 표시 할 수 있습니까?

예를 들어, 나는 기능 foobar

function foobar { 
    echo "I'm foobar" 
} 

나중에 foobar 실행되는 코드를 얻을 수있는 방법이 있나요 정의 말?

$ # non-working pseudocode 
$ echo $foobar 
echo "I'm foobar" 

답변

240

type을 사용하십시오. foobar이 예 :

$ type foobar 
foobar is a function 
foobar { 
    echo "I'm foobar" 
} 

foobar이 무엇인지 알아 않으며,이 함수로 정의 된 경우는 pmohandras에 의해 설명 된 바와 같이 declare -f 호출하여 ~/.profile에 정의.

+1

이것은 zsh에서 작동하지 않습니다. declare -f func는 거의 모든 곳에서 작동합니다. – sjsupersumit

127

선언을 사용하여 bash에서 함수의 정의를 표시 할 수 있습니다. 예 :

declare -f foobar 
+0

위대한 함수 이름는 foobar (로 시작)와 함께 끝나는 set 명령에서 줄을} 인쇄에도 작동 할 때로드 된 다른 스크립트 파일에 정의 된 기능. zsh에서도 작동합니다. –

+1

zsh에서 작동합니다. 선택한 대답이 나를 위해 작동하지 않습니다. – Bijan

+1

'typeset -f'를 사용하면 Linux가 아닌 시스템에서 이전 쉘과 함께 작동합니다. – Emmanuel

6
set | grep -A999 '^foobar()' | grep -m1 -B999 '^}' 

foobar는 함수 이름입니다.

+4

문제 : defintion에 "{...}"의 중첩이 포함될 때마다 Bash가 허용하는 첫 번째 "}"까지만 표시됩니다. –

+1

함수에 curly-brace 패턴을 포함하는 here-doc/here-string이 포함 된 경우에도 실패 할 수 있습니다 – Cheetah

2
set | sed -n '/^foobar()/,/^}/p' 

이 기본적으로, 지점,

관련 문제