当 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