问题描述
当 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."
}