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