터미널에서 쉘 함수의 코드를 인쇄하는 방법은 무엇입니까?

터미널에서 쉘 함수의 코드를 인쇄하는 방법은 무엇입니까?

나는 zsh일부 셸 스크립트에서 일부 유틸리티 셸 함수를 사용하고 정의하고 있는데 그 중 일부는 에서 호출되므로 ~/.zshrc이러한 함수의 위치를 ​​모른다고 가정해 보겠습니다. 한 가지 기능은 다음과 같습니다.

function k.pstree.n {
    if [ "$1" != "" ]
    then
        pstree -p | grep -C3 "$1"
    else
        printf "  Please specify the name of the process you want to show!\n"
    fi
}

이 쉘 함수의 코드를 인쇄하는 방법은 무엇입니까?

검색과 grep을 다음과 같이 생각할 수 있습니다.

find $(pwd) -name "*sh*" -type f -printf "\"%p\"\n" | xargs grep -C5 "k.pstree.n"

그러나 이것은 내가 위치를 대략적으로 알고 있다고 가정하지만 여기서는 그렇지 않습니다.

답변1

이 목적을 위한 functions내장 명령이 있습니다.zsh

functions k.pstree.n

예를 들어 내 preexec기능은 다음과 같습니다.

$ functions preexec

preexec () {
    local cmd=${1:-}
    cmd=${cmd//\\/\\\\} 
    [[ "$TERM" =~ screen* ]] && cmd="S $cmd" 
    inf=$(print -Pn "%n@%m: %3~") 
    print -n "\e]2;$cmd $inf\a"
    cmd_start=$SECONDS 
}

또는 which를 사용하는 것의 장점은 and에서도 작동할 수 있다는 것입니다.typeset -fp function_namekshbashyash

에서 zsh함수 정의는 $functions특수 연관 배열에서도 찾을 수 있습니다(키는 함수 이름이고 값은 함수 본문입니다).

답변2

사용할 수 있는 명령은 무엇입니까?

$ which k.pstree.n

관련 정보