当前位置: 首页>>技术教程>>正文


我如何在 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/article/12181.html,未经允许,请勿转载。