명령을 찾을 수 없음 메시지

명령을 찾을 수 없음 메시지

매개변수나 옵션 없이 잘못된 명령을 실행하면 내 경험상 아래와 같이 두 가지 종류의 메시지만 표시됩니다.

~$ Date
No command 'Date' found, did you mean:
 Command 'yate' from package 'yate' (universe)
 Command 'date' from package 'coreutils' (main)
 Command 'late' from package 'late' (universe)
 Command 'kate' from package 'kate' (universe)
Date: command not found
~$ fjldjflsk
fjldjflsk: command not found
~$

이것이 어떻게 작동하는지 더 자세히 알고 싶습니다. 구체적으로, 명령을 실행하기 전에 이 두 메시지 중 어떤 메시지를 받게 될지 언제 알 수 있습니까? 이 동작을 쉽게 변경할 수 있는 일종의 환경 변수나 다른 장치가 있습니까? 두 번째 메시지만 받고 싶습니다.

답변1

쉘은 명령을 찾을 수 없을 때 bash호출되는 함수를 호출합니다.command_not_found_handle

이 함수는 다음과 같이 볼 수 declare -f command_not_found_handle있으며 다음과 같이 보일 수 있습니다(Ubuntu 시스템에 있음).

command_not_found_handle ()
{
    if [ -x /usr/lib/command-not-found ]; then
        /usr/lib/command-not-found -- "$1";
        return $?;
    else
        if [ -x /usr/share/command-not-found/command-not-found ]; then
            /usr/share/command-not-found/command-not-found -- "$1";
            return $?;
        else
            printf "%s: command not found\n" "$1" 1>&2;
            return 127;
        fi;
    fi
}

보시다시피 이라는 또 다른 변수를 사용합니다 command-not-found. 또한 인용되지 않은 변수 확장과 불필요한 명령문을 사용 return하지만 지금은 그게 중요하지 않습니다.

이 함수에 의해 수행된 예측을 제거하려면 다음을 사용하여 함수를 완전히 제거할 수 있습니다.

unset -f command_not_found_handle

(이것이 아마도 최선의 옵션일 것입니다.) 또는 시스템이 다음을 사용한다고 가정하고 함수에서 사용되는 실행 파일을 제거할 수 있습니다 apt.

sudo apt purge command-not-found

(이 command-not-found명령은 적어도 Ubuntu와 같은 이름의 패키지의 일부입니다.)

이 기능에 대한 자세한 내용은 설명서를 command_not_found_handle참조하십시오 bash.

관련 정보