ฉันจะสอนทุบตีใน Ubuntu คำบางคำสาปได้อย่างไร


21

เมื่อทุบตีพบคำสั่งที่ไม่รู้จัก (คำ?) มันทำเช่นนี้:

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.