bash의 스크립트에는 포함 된 라이브러리가 많이 있으며이 파일에 선언 된 함수를 사용합니다. 이와 같이 :bash에서 함수의 선언은 어디에 있습니까?
#!/bin/bash
. foo.inc
. bar.inc
. baz.inc
function_1
function_2
function_3
EOF
제 질문은 function_1 선언을 포함하는 파일을 배우는 방법입니다. 이 스크립트의 런타임에.
bash의 스크립트에는 포함 된 라이브러리가 많이 있으며이 파일에 선언 된 함수를 사용합니다. 이와 같이 :bash에서 함수의 선언은 어디에 있습니까?
#!/bin/bash
. foo.inc
. bar.inc
. baz.inc
function_1
function_2
function_3
EOF
제 질문은 function_1 선언을 포함하는 파일을 배우는 방법입니다. 이 스크립트의 런타임에.
당신은 모른다. 당신은 정의에 포함 된 파일을 grep을해야합니다
나는 포함하고 싶지 않아 ... –
그런 다음 그들을 포함해서는 안됩니다. 죄송합니다. 귀하의 문제를 충분히 이해하지 못합니다. 의존하는 파일을 포함하면 – Mark
새 lib를 포함 할 때 새 grep을 추가하고 싶지 않습니다 ... 유형 -t function_1이는 것을 알 수 있습니다 말할 수있는 기능 형 -f 핑 어디 이있는 내 함수가 정의 정보 파일 배울 수있는 방법이 될 수 있습니다 파일 ...? –
편집 :
shopt -s extdebug
은 다음 소스 파일 이름과 라인을 검색 할 수 있습니다 스크립트에서
, 다음 줄을 추가합니다
def=($(declare -F function_1))
echo "function name: ${def[0]}"
echo "line number: ${def[1]}"
echo "file name: ${def[@]:2}" # the array slice makes it work even if the filename contains spaces
원래 답 : 함수 정의에서 시작하는 파일 수 :
런타임에 함수를 제공하는 파일을 알 필요가 없습니다. 코드를 게시 한 경우 필요한 정보를 더 잘 볼 수 있습니다.
파일을 원본으로 만들 때 (예 : ". foo.inc
"사용) 실제로 주 파일에있는 것처럼 처리됩니다.
당신이 필요로하는 경우가 장전 경우, 어떤 이유로, 알고 아직 당신이 (울고 차에 아이들에 가깝다 몇 초마다 "우리는 아직?") 추한 뭔가를 할 수 :
function_check()
{
local fn found notfound;
for fn in $function_list;
do
if [[ -n $(declare -F $fn) ]]; then
found+=$fn" ";
else
notfound+=$fn" ";
fi;
done;
echo $found;
function_list=$notfound
}
function_list="function_1 function_2 function_3"
. foo.inc
foo_list=$(function_check)
. bar.inc
bar_list=$(function_check)
. baz.inc
baz_list=$(function_check)
echo "Warning: the following functions were not found: $function_list"
function_check
함수는 $function_list
에 나열된 함수가 있는지 확인하고 발견되면 해당 함수를 반향 출력하고 목록에서 제거합니다. (예를 들어 그렇게 빨리 세 번!)
편집 : 여기
내가 당신이 원하는 것을 매우 가까이있을 수 있습니다 무슨 생각을 할 수있는 방법이다 :하여 각각의 기능에 추가
스크립트에서 다음function_1()
{
if [[ $1 == "--source" ]]
then
echo "source: ${BASH_SOURCE}"
return
fi
# do your function stuff
}
, 당신은 파일이 기능을 포함 할 수있는 소스와 particula의 원인을 찾기 위해이 같은 소스를 반환하는 옵션에 대한 테스트 r 함수 :
function_1 --source
은 원래 파일 이름을 표시합니다. 그리고 물론 당신은 그것을 행동 할 수
if [[ $(function_1 --source) == /some/dir/file ]]
then
do_something
fi
@Grokix : 나는 몇 가지 추가 정보를 추가했습니다. –
이 왜 foo.inc, bar.inc 및 baz.inc로 보지 않는다? –
새 include를 추가하려면 검색 기능에 새 코드를 추가해야합니다. –