如何在 Ubuntu 中教 bash 一些脏话?

如何在 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 时,我都希望得到一些好的东西作为回报......

答案1

查找你的函数/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
}

答案2

可能有潜在用途……

command-not-found 包会给你神奇的响应。我不确定是否可以自定义它,但可能值得一看。

我认为您要尝试执行的另一种选择是向您的 .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."
}

答案4

@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

相关内容