우분투에서 bash를 어떻게 저주 단어를 가르치는가?


21

bash가 알 수없는 명령 (word?)을 발견하면 다음을 수행합니다.

The program 'hello' can be found in the following packages:
 * hello
 * hello-debhelper
Try: sudo apt-get install <selected package>

내가 알고 싶은 것은 이것이 수행되는 방법이므로 편집하거나 무언가를 추가하여 집에서 자라는 사전에서 알 수없는 단어를 교차 확인하기 위해 문구 : 답장 쌍을 가진 다음 출력으로 보낼 수 있습니다.

나는 그것을 둘러보기에 충분하지 않다는 죄책감이 있습니다. 어쩌면 내가 잘못된 곳을보고있을 것입니다. 어떤 포인터?

그리고 네, 프로그램이 실패 할 때 wtf를 입력 할 때마다 나에게 좋은 무언가를 던져주고 싶습니다.


1
우리가 그것을하는 동안, 당신은 어떻게 이것을 완전히 비활성화합니까?
user606723

2
@ user606723 참조 askubuntu.com/q/72853/6969
Lekensteyn

또 다른 유용한 링크 : wiki.ubuntu.com/CommandNotFoundMagic
glenn jackman

답변:


21

함수 정의 /etc/bash.bashrc를 찾으십시오 command_not_found_handle.

그 행동을 제거하려면 이것을 .bashrc에 넣으십시오.

[[ $(type -t command_not_found_handle) = "function" ]] && 
  unset -f command_not_found_handle

사용자 정의하려는 경우 수행 할 수 있습니다

# see http://stackoverflow.com/questions/1203583/how-do-i-rename-a-bash-function
alias_function() {
  eval "${1}() $(declare -f ${2} | sed 1d)"
}

alias_function orig_command_not_found_handle command_not_found_handle 

command_not_found_handle() {
  command=$1
  shift
  args=( "$@" )

  do your stuff before
  orig_command_not_found_handle "$command" "${args[@]}"
  do your stuff after
}

1
나는이 접근법을 좋아한다.
ændrük

1
와우! 나는 alias_function 아이디어 :-) 좋아
anishsane을

현재 정의를 보거나 확인하려면 다음과 같이하십시오.declare -p -f command_not_found_handle
Randall

4

이것은 잠재적으로 유용 할 수 있습니다 ...

찾을 수없는 명령 패키지는 마법의 반응을 제공합니다. 사용자 정의가 가능한지 확실하지 않지만 살펴볼 가치가 있습니다.

내가 생각하는 것을 수행하는 또 다른 옵션은 .bashrc 파일에 별칭을 추가하여 'wtf'또는 그와 비슷한 것을 입력 할 때마다 메시지를 인쇄하는 것입니다.

alias wtf='echo "chill out man"'

이것을 ~ / .bashrc 파일에 추가하고 다음을 수행하십시오. source $HOME/.bashrc

그러면 wtf터미널에 입력 할 때마다 메시지가 인쇄 됩니다. 이 별명을보다 자세한 메시지 또는 이와 유사한 것을 인쇄하는 스크립트라고 할 수도 있습니다. 가능성은 끝이 없습니다!


3

이 동작은 시스템 전체 Bash 구성 파일에 정의되어 있습니다 /etc/bash.bashrc.

# if the command-not-found package is installed, use it
if [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found ]; then
  function command_not_found_handle {
    # check because c-n-f could've been removed in the meantime
    if [ -x /usr/lib/command-not-found ]; then
      /usr/bin/python /usr/lib/command-not-found -- "$1"
      return $?
    elif [ -x /usr/share/command-not-found ]; then
      /usr/bin/python /usr/share/command-not-found -- "$1"
      return $?
    else
      return 127
    fi
  }
fi

이를 사용자 정의하려면이 기능을 사용자 정의하십시오 ~/.bashrc.

function command_not_found_handle {
  echo "Sorry, smotchkiss, try again."
}

0

@ user606723,이 동작을 완전히 제거하려면 다음을 수행하십시오.

sudo apt-get remove command-not-found command-not-found-data 

그래도 작동하지 않으면 다음을 시도하십시오.

sudo apt-get purge command-not-found command-not-found-data 

동작을 되돌리려면 다음을 수행하십시오.

sudo apt-get install command-not-found
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.