Bash가 특정 명령에 대한 자동 완성 정의를 표시하도록 하려면 어떻게 해야 합니까?

Bash가 특정 명령에 대한 자동 완성 정의를 표시하도록 하려면 어떻게 해야 합니까?

내 환경에서 명령을 사용하여 module항목을 로드 및 언로드하는데, 내가 사용하는 일부 시스템에는 올바른 자동 완성 기능이 있고 다른 시스템에는 없습니다.

완성본이 어디서 왔는지 알 수 있고, 다른 곳에 설치할 수 있는지 궁금합니다.

답변1

내장된 명령을 사용하여 명령의 완료 코드를 표시할 수 있습니다 complete. 예는 다음과 같습니다.

$ complete -p ls
complete -F _longopt ls

그 기능에 관심이 있다면 내장 함수를 _longopt사용할 수 있습니다 .type

$ type -a _longopt
_longopt is a function
_longopt () 
{ 
    local cur prev words cword split;
    _init_completion -s || return;
    case "${prev,,}" in 
        --help | --usage | --version)
   ----- snip ------

기능이라면 HairOfTheDog가 지적한 솔루션을 사용할 수 있습니다.여기:

# Turn on extended shell debugging
shopt -s extdebug

# Dump the function's name, line number and fully qualified source file  
declare -F _longopt

# Turn off extended shell debugging
shopt -u extdebug

Bash는 초기화 중에 환경 변수나 함수가 정의된 위치를 확인할 수 없습니다. 그렇지 않으면 bash가 실행 중인 내용에 대한 정보를 얻을 수 있습니다 -x.

bash -x -i -l

그러면 디버그 모드에서 대화형 로그인 셸이 실행되고 실행된 모든 줄이 표시됩니다. 출력에서 함수 정의가 발견되면 source해당 정의 이전의 마지막 또는 명령을 찾을 수 있습니다..

관련 정보