Làm thế nào để tôi dạy bash trong Ubuntu một số từ chửi rủa?


21

Khi bash gặp một lệnh không xác định (từ?), Nó thực hiện điều này:

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

Những gì tôi muốn biết là làm thế nào để nó được thực hiện để tôi có thể chỉnh sửa nó hoặc thêm một cái gì đó trước khi nó kiểm tra chéo từ chưa biết từ một từ điển gia đình có cụm từ: các cặp trả lời có thể được gửi đến đầu ra.

Tôi có lỗi vì không tìm đủ cho nó xung quanh .. nhưng một vài hướng dẫn bash tôi đã cố gắng đào lên không có gì về điều này. Có lẽ tôi đang nhìn vào những chỗ sai .. bất kỳ con trỏ?

Và vâng, tôi đang làm điều này vì vậy mỗi lần tôi gõ wtf khi một chương trình thất bại, tôi muốn một cái gì đó tốt đẹp ném lại cho tôi ...


1
Trong khi chúng ta đang ở đó, làm thế nào để bạn vô hiệu hóa điều này hoàn toàn?
dùng606723


Một liên kết hữu ích khác: wiki.ubfox.com/CommandNotFoundMagic
glenn jackman

Câu trả lời:


21

Nhìn vào của bạn /etc/bash.bashrccho command_not_found_handleđịnh nghĩa hàm.

Nếu bạn muốn loại bỏ hành vi đó, hãy đặt nó trong .bashrc của bạn

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

Nếu bạn muốn tùy chỉnh, bạn có thể làm

# 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
Tôi thích cách tiếp cận này.
ændrük

1
ồ Tôi thích ý tưởng alias_feft :-)
anishsane

Để xem / kiểm tra định nghĩa hiện tại, hãy làm:declare -p -f command_not_found_handle
Randall

4

Điều này có thể có khả năng hữu ích ...

Gói không tìm thấy lệnh là thứ mang lại cho bạn phản ứng kỳ diệu. Tôi không chắc có thể tùy chỉnh nó hay không, nhưng nó có thể đáng xem.

Một tùy chọn khác để làm những gì tôi nghĩ những gì bạn đang cố gắng làm là thêm một bí danh vào tệp .bashrc của bạn để in một tin nhắn bất cứ khi nào bạn gõ 'wtf' hoặc đại loại như thế:

alias wtf='echo "chill out man"'

Thêm phần này vào tệp ~ / .bashrc của bạn, rồi làm: source $HOME/.bashrc

Điều này sau đó sẽ chỉ in một tin nhắn bất cứ khi nào bạn nhập wtfvào thiết bị đầu cuối của bạn. Bạn cũng có thể làm cho bí danh này gọi một tập lệnh in một thông điệp chi tiết hơn hoặc một cái gì đó tương tự. Khả năng là vô tận!


3

Hành vi này được xác định trong tệp cấu hình Bash trên toàn hệ thống , /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

Để tùy chỉnh nó, chỉ cần ghi đè chức năng này theo cách riêng của bạn ~/.bashrc:

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

0

@ user606723, nếu bạn muốn loại bỏ toàn bộ hành vi này:

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

Nếu điều đó không hiệu quả, hãy thử điều này:

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

Nếu bạn muốn lấy lại hành vi:

sudo apt-get install command-not-found
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.