Bagaimana cara saya mengajar bash di Ubuntu beberapa kata kutukan?


21

Ketika bash menemukan perintah (kata?) Yang tidak dikenal, ia melakukan ini:

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

apa yang ingin saya ketahui adalah bagaimana hal ini dilakukan sehingga saya dapat mengeditnya atau menambahkan sesuatu sebelum melakukan pengecekan silang kata yang tidak dikenal dari kamus buatan sendiri yang memiliki frase: balas pasangan yang kemudian dapat dikirim ke keluaran.

Saya bersalah karena tidak cukup mencari di sekitar .. tetapi beberapa panduan bash saya mencoba menggali tidak memiliki apa-apa tentang ini. Mungkin saya melihat tempat yang salah .. ada petunjuk?

Dan ya saya melakukan ini sehingga setiap kali saya mengetik jika program gagal, saya ingin sesuatu yang bagus dikembalikan kepada saya ...


1
Sementara kita berada di sana, bagaimana Anda menonaktifkan ini sama sekali?
user606723

2
@ user606723 lihat askubuntu.com/q/72853/6969
Lekensteyn

Tautan lain yang bermanfaat: wiki.ubuntu.com/CommandNotFoundMagic
glenn jackman

Jawaban:


21

Lihat di Anda /etc/bash.bashrcuntuk command_not_found_handledefinisi fungsi.

Jika Anda ingin menghapus perilaku itu, masukkan ini ke dalam .bashrc Anda

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

Jika Anda ingin menyesuaikan, Anda bisa melakukannya

# 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
Saya suka pendekatan ini.
ændrük

1
Wow! Saya menyukai ide alias_function :-)
anishsane

Untuk melihat / memeriksa definisi saat ini, lakukan:declare -p -f command_not_found_handle
Randall

4

Ini mungkin berpotensi bermanfaat ...

Paket perintah-tidak-ditemukan adalah yang memberi Anda respons ajaib. Saya tidak yakin apakah mungkin untuk menyesuaikannya, tetapi mungkin layak untuk dilihat.

Opsi lain untuk melakukan apa yang saya pikir ingin Anda lakukan adalah menambahkan alias ke file .bashrc Anda yang mencetak pesan setiap kali Anda mengetikkan 'wtf' atau sesuatu seperti itu:

alias wtf='echo "chill out man"'

Tambahkan ini ke file ~ / .bashrc Anda, dan kemudian lakukan: source $HOME/.bashrc

Ini kemudian hanya akan mencetak pesan setiap kali Anda mengetik di wtfterminal Anda. Anda juga dapat membuat alias ini memanggil skrip yang mencetak pesan yang lebih rinci atau yang serupa. Kemungkinannya tidak terbatas!


3

Perilaku ini didefinisikan dalam seluruh sistem file konfigurasi 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

Untuk menyesuaikannya, cukup timpa fungsi ini di Anda sendiri ~/.bashrc:

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

0

@ user606723, jika Anda ingin menyingkirkan perilaku ini secara keseluruhan:

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

Jika itu tidak berhasil, coba ini:

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

Jika Anda ingin mendapatkan kembali perilaku tersebut:

sudo apt-get install command-not-found
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.