programing

셸에 정의된 기능을 나열하려면 어떻게 해야 합니까?

kakaobank 2023. 5. 22. 21:16
반응형

셸에 정의된 기능을 나열하려면 어떻게 해야 합니까?

별칭을 입력하여 모든 별칭 목록을 표시할 수 있습니다.

하지만 기능에 대해서는, 제가 할 수 있는 것은 그리피뿐입니다..bash_profile.

그러면 해당 파일에 있는 파일만 얻을 수 있고, 보조 파일이나 동적으로 정의된 파일은 얻을 수 없습니다.

현재 정의된 기능을 확인할 수 있는 더 편리한 방법이 있습니까?

declare -F

함수 이름 및 정의는 다음과 같이 나열될 수 있습니다.-f에 대한 옵션declare내장 명령(배시 내장 명령 참조).-F에 대한 선택권.declare에는 함수 이름만 나열됩니다(및 선택적으로 원본 파일 및 줄 번호).

Bash 참조 설명서

bash 셸 가정:

typeset -f

에는 함수가 나열됩니다.

typeset -F

에는 함수 이름만 나열됩니다.

declare -F

모든 함수의 이름을 제공합니다.

type function_name

특정 기능에 대한 소스를 제공합니다.

declare -F실제로는 함수 이름뿐만 아니라 선언 명령도 출력합니다.

$ declare -F
declare -f function1
declare -f function2

사용할 수 있습니다.compgen -A function함수 이름만 인쇄하려면:

$ compgen -A function
function1
function2

유형 집합이 더 이상 사용되지 않습니다. 다음을 사용하십시오.

declare -f

또는

declare -f function_name

또는

type function_name
set | grep " ()"

grep 대신 fgrep 또는 hgrep을 사용할 수도 있습니다(hgrep은 제가 개인적으로 가장 좋아하는 것입니다, grep이지만 'grep-ped' 결과를 강조 표시합니다).

hgrep은 여기에서 찾을 수 있습니다: ACME Labs hgrep

저는 아직 배우는 것에 전문가는 아니지만, 같은 것을 원했기 때문에 이 질문과 답을 찾은 후, 저는 궁극적으로 제가 추구하는 것을 제공하기 위해 다음과 같은 것을 썼습니다: 별칭과 기능의 형식화된 목록:

function functionaliaslist() {
    echo
    echo -e "\033[1;4;32m""Functions:""\033[0;34m"
    declare -F | awk {'print $3'}
    echo
    echo -e "\033[1;4;32m""Aliases:""\033[0;34m"
    alias | awk {'print $2'} | awk -F= {'print $1'}
    echo
    echo -e "\033[0m"
}

그건 제가 리리의 대답을 보기 전이었고, 그래서 그것으로부터 추론해보면, 저는 그것을 대체합니다.declare그리고.alias적절한 행compgen명령 대신 다음을 가져옵니다.

function functionaliaslist() {
    echo
    echo -e "\033[1;4;32m""Functions:""\033[0;34m"
    compgen -A function
    echo
    echo -e "\033[1;4;32m""Aliases:""\033[0;34m"
    compgen -A alias
    echo
    echo -e "\033[0m"
}

내가 원했던 것에 대해 효과가 있습니다.다른 사람에게 도움이 될 경우를 대비해 공유합니다.

사용할 수 있는 다양한 다른 "액션"이 있습니다.compgen -A [action](및 기타 옵션:compgen물론).나는 여기서 man 페이지에 대한 링크도 포함된 좋은 을 찾았습니다.man compgen경우에 따라 작동하지 않음).

Bash 셸 스크립트 관련 답변

( 질문은 이 질문의 중복으로 표시되었기 때문에)

셸에서 내보낸 함수가 있으면 호출된 스크립트에서 해당 함수를 볼 수 있습니다.하지만 다행히도, 그들은 그렇게 표시됩니다.

복사-파스타 데모 스크립트

#!/bin/bash
foo(){ :;}; bar(){ :;}; baz(){ :;}; export -f foo bar

export -pf

bash -c $'spam(){ :;}; \
echo "RAW:"; \
declare -pF; \
echo "FILTERED:"; \
declare -pF | awk \'$2 !~ /x/{print$3}\''

바시 문자 변환

/tmp $ foo(){ :;}; bar(){ :;}; baz(){ :;}; export -f foo bar

/tmp $ export -pf
bar ()
{
    :
}
declare -fx bar
foo ()
{
    :
}
declare -fx foo

/tmp $ bash -c $'spam(){ :;}; echo "RAW:"; declare -pF; echo "FILTERED:"; declare -pF | awk \'$2 !~ /x/{print$3}\''
RAW:
declare -fx bar
declare -fx foo
declare -f spam
FILTERED:
spam

언급URL : https://stackoverflow.com/questions/4471364/how-do-i-list-the-functions-defined-in-my-shell

반응형