當前位置: 首頁>>技術教程>>正文


我如何在 Ubuntu 中教 bash 一些詛咒詞?

,

問題描述

當 bash 遇到未知命令(單詞?)時,它會執行以下操作:

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

我想知道的是這是如何完成的,所以我可以編輯它或在它之前添加一些東西來交叉檢查來自本土詞典的未知單詞,該詞典將有短語:回複對,然後可以發送到輸出。

我為周圍沒有足夠的尋找而感到內疚..但是我嘗試挖掘的少數 bash 指南對此一無所知。也許我看錯了地方……有什麽指點嗎?

是的,我正在這樣做,所以每次我在程序失敗時鍵入 wtf 時,我都希望得到一些好的東西……

最佳回答

/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
}

次佳回答

This 可能有用…

command-not-found 包是什麽給你神奇的反應。我不確定是否可以自定義它,但它可能值得一看。

做我認為您正在嘗試做的事情的另一種選擇是向您的 .bashrc 文件添加一個別名,該文件在您鍵入 ‘wtf’ 或類似內容時打印一條消息:

alias wtf='echo "chill out man"'

將此添加到您的 ~/.bashrc 文件中,然後執行:source $HOME/.bashrc

每當您在終端中鍵入 wtf 時,這隻會打印一條消息。您還可以讓這個別名調用一個腳本來打印更詳細的消息或類似的東西。可能性是無止境!

第三種回答

此行為在 system-wide 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."
}

參考資料

本文由Ubuntu問答整理, 博文地址: https://ubuntuqa.com/zh-tw/article/12181.html,未經允許,請勿轉載。