Ubuntu'da bash bazı lanetli kelimeleri nasıl öğretirim?


21

Bash bilinmeyen bir komutla (word?) Karşılaştığında şunu yapar:

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

bilmek istediğim şey bunun nasıl yapılacağıdır, bu yüzden onu düzenleyebiliyorum ya da bilinmeyen kelimeyi, kelimesi olan bir evde yetişen sözlükten kontrol etmek için bir şeyler ekleyebiliyorum: daha sonra çıktıya gönderilebilecek cevap çiftleri.

Etrafında yeterince aramayacağım için suçluluk duyuyorum .. ama kazmaya çalıştığım birkaç bash kılavuzunda bu konuda hiçbir şey yoktu. Belki de yanlış yerlere bakıyorum .. herhangi bir işaretçi?

Ve evet bunu yapıyorum, bu yüzden bir program başarısız olduğunda wtf yazdığımda, bana güzel bir şey atılmasını istiyorum ...


1
Biz varken, bunu nasıl tamamen devre dışı bırakıyorsunuz?
user606723

2
@ user606723, bkz. askubuntu.com/q/72853/6969
Lekensteyn

Yanıtlar:


21

İşlev tanımı /etc/bash.bashrciçin kendinize bakın command_not_found_handle.

Bu davranışı kaldırmak istiyorsanız, bunu .bashrc dosyasına koyun.

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

Özelleştirmek istiyorsanız, yapabilirsiniz

# 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
Bu yaklaşımı seviyorum.
ændrük

1
Vaov! Alias_function fikri hoşuma gitti :-)
anishsane

Mevcut tanımı görmek / kontrol etmek için, şunları yapın:declare -p -f command_not_found_handle
Randall

4

Bu potansiyel olarak yararlı olabilir ...

Bulunamayan paket, size sihirli cevabı veren şeydir. Özelleştirmek mümkün olup olmadığından emin değilim, ancak bir göz atmaya değer olabilir.

Yapmaya çalıştığımı düşündüğüm şeyi yapmak için başka bir seçenek .bashrc dosyanıza 'wtf' yazdığınızda veya bunun gibi bir şey yazdığında bir ileti yazan bir takma ad eklemek olacaktır:

alias wtf='echo "chill out man"'

Bunu ~ / .bashrc dosyasına ekleyin ve sonra yapın: source $HOME/.bashrc

Bu daha sonra wtfterminalinize ne zaman yazsanız bir mesajı yazdırır . Bu takma adı daha ayrıntılı bir mesaj ya da benzer bir şey basan bir komut dosyası olarak da yapabilirsiniz. İmkanlar sonsuzdur!


3

Bu davranış, sistem genelindeki Bash yapılandırma dosyasında tanımlanır /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

Özelleştirmek için, bu işlevi kendi başınıza geçersiz kılın ~/.bashrc:

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

0

@ user606723, bu davranıştan tamamen kurtulmak istiyorsanız:

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

Bu işe yaramazsa, şunu dene:

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

Davranışı geri almak istiyorsanız:

sudo apt-get install command-not-found
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.