별칭/함수/심볼릭 링크를 저장하고 버전을 지정하는 가장 좋은 방법은 무엇입니까?

별칭/함수/심볼릭 링크를 저장하고 버전을 지정하는 가장 좋은 방법은 무엇입니까?

실제로 내 파일에 다음 줄이 있습니다(예) .zshrc.

. ${TOOLS_HOME}/cli/.cli_base
. ${TOOLS_HOME}/cli/.cli_functions
. ${TOOLS_HOME}/cli/.cli_symlinks

지금까지 잘 작동했습니다. 내 유일한 문제는 이 .cli_xxx파일에 구문 강조가 없다는 것입니다(별칭의 경우 괜찮지만 함수의 경우 매우 어렵습니다).
그래서 나는 이것을 시도했습니다 :

. ${TOOLS_HOME}/cli/cli_base.sh
. ${TOOLS_HOME}/cli/cli_functions.sh
. ${TOOLS_HOME}/cli/cli_symlinks.sh

하지만 (Google에서 본 것처럼) 파일을 가져와서 별칭을 실행할 때 .가끔 다음과 같은 오류 메시지가 나타납니다.source.zshrc

bash:30: maximum nested function level reached

"다양한 소스" 때문인가요? 별칭/함수/심볼릭 링크를 저장하고 버전 관리하는 "모범 사례"를 좋아하는 사람이 있나요? 아니면 파일을 계속
유지해야 하나요 ?.cli_xxxx

답변1

.zshrc파일 이름과 전혀 관련이 없는 문제가 원래 상태로 가져오면 문제가 발생할 수도 있다고 생각합니다.

잘못된 이유

이 오류는 일반적으로 함수 내부에서 함수를 호출하여 재귀를 일으킬 때 발생합니다. 함수에 사용된 외부 또는 내장 명령과 동일한 이름을 함수에 지정하면 실수로 이런 일이 발생할 수 있습니다. 예를 들어:

echo () {
    echo "Out: " $@
}

이 함수를 정의하기 전에는 명령이 echo제대로 작동하지만 정의한 후에는 다음 오류와 함께 명령이 실패합니다.

% echo foobar
echo:1: maximum nested function level reached; increase FUNCNEST?

(메시지 텍스트의 차이는 사용된 zsh 버전으로 인해 발생할 수 있습니다. 제 경우에는 5.6.2입니다.)

이는 여러 함수가 서로 호출하는 경우에도 발생할 수 있습니다.

foo () {
    echo $@
}

echo () {
    something_else
    foo $@
} 

오류 메시지에는 중첩 한계에 도달하여 더 이상 호출할 수 없는 함수의 이름과 호출이 발생한 함수 라인이 표시됩니다. 따라서 위의 경우:

% echo foobar
echo:1: maximum nested function level reached; increase FUNCNEST?

또는

% echo foobar
foo:2: maximum nested function level reached; increase FUNCNEST?

이 질문의 경우 bash특정 함수의 30번째 라인에서 해당 이름의 함수가 호출되는 것으로 보입니다.

고치다

재귀가 의도적인 것이 아니라면 zsh사용할 비기능 명령을 알려줌으로써 이를 방지할 수 있습니다.

  • 내장 명령을 원하면 앞에 다음을 추가하면 됩니다 builtin.

    echo ()
    {
        builtin echo "Out: " $@
    }
    
  • 외부 명령을 원하면 앞에 다음을 추가하세요 command.

    echo ()
    {
        command echo "Out: " $@
    }
    

    또는 전체 경로를 사용하십시오.

    echo ()
    {
        /bin/echo "Out: " $@
    }
    

bash구성 에서 이를 어디에 사용해야 할지 확실하지 않은 경우 재귀 검색을 zsh사용할 수 있습니다 .grep${TOOLS_HOME}/cli/

grep -r bash ${TOOLS_HOME}/cli/

관련 정보