2013-01-08 3 views
0

쉘 스크립트 (소싱중인 쉘 스크립트 함수 라이브러리)의 모든 함수 목록을 생성하려고합니다. 현재, 나는 다음과 같은 방법으로 조판을 실험하고 있습니다 :쉘 스크립트에서 함수 목록을 얻는 방법은 무엇입니까?

typeset -f 
typeset -F 
typeset -F | awk -F"declare -f " '{print $2}' | grep -v '_' 

나는 데 어려운 점은 함수 라이브러리에없는 일부 기능이 나열되고 난에서 다음을 절제하는 방법을 모르는 것입니다 함수 목록 또는 더 나은 방법으로 함수 목록을 생성하는 방법. 나는 당신이 이것에 대해 가지고있는 아이디어를 환영 할 것입니다.

보너스는 함수가 쉘 스크립트에 나타나는 순서대로 함수 목록을 생성하는 것입니다.

+0

함수 라이브러리 (아마도 잘 알려진 디렉토리)에있는 함수 만 원한다면 함수 라이브러리를 나열하지 않는 이유는 무엇입니까? 어떤 셸을 사용하고 있습니까? – cdarke

+0

나는 Bash를 사용하고 있습니다. 스크립트의 함수 이름 목록을 갖고 싶습니다. 스크립트 라이브러리 파일을 분석 할 때의 어려움은 함수 선언에 사용 된 텍스트의 형식이 함수간에 변경 될 수 있다는 것입니다. – d3pd

답변

1

나는 bash가 쉘이라고 가정합니다.

  • 원치 않는 기능
  • 환경에서 상속 할 수있다 (이름이 출력에 분류되어 있습니다) 환경에는 고유의 순서가 없습니다

    • : 조판 (또는 선언) 기능은 환경의 일부이며, 현재의 환경을 보여

      : 있었던 것 이전에 선언과 수출 표시 하고는
    당신은 깨끗한 환경에서 스크립트를 시작합니다 "ENV"실험 할 수

    시도를 -x

    을 출발점으로합니다.

    bash의 함수를 열거하는 가장 좋은 방법은 다음과 같습니다. Where is function's declaration in bash? "declare -F"는 파일 이름을 표준화하지 않으며 호출/소스로 사용됩니다.

    while read xx yy fn; do 
        func=($(shopt -s extdebug; declare -F $fn)) 
        printf "%-30s %4i %-30s\n" "${func[@]:2}" "${func[1]}" "${func[0]}" 
    done < <(declare -F) 
    

    필요한 파일 이름으로 필터링하고 줄 번호별로 정렬하면됩니다. (코드는 함수 라이브러리 스크립트에 포함된다) 내가 가지고있는

    +0

    도움 주셔서 대단히 감사합니다. 주문 트릭은 깨끗하고 유용합니다. – d3pd

    1

    한 가지 방법은 다음과 같습니다

    이 환경에 추가 된 모든 기능의 간단한 목록을 가져 오는 것 같습니다
    initialListOfFunctionsInEnvironment="$(typeset -F | awk -F"declare -f " '{print $2}')" 
    # declare functions 
    finalListOfFunctionsInEnvironment="$(typeset -F | awk -F"declare -f " '{print $2}')" 
    diff <(echo "${initialListOfFunctionsInEnvironment}") <(echo "${finalListOfFunctionsInEnvironment}") | grep -E '^(<|>)' | awk -F"> " '{print $2}' 
    

    때 기능 라이브러리 스크립트가 소스입니다. 이 접근법에 대한 비판은 인정 될 것입니다.

    관련 문제