我最终决定冒险尝试一下 zsh。在 CentOS 7 机器上运行。唯一令我感到奇怪的是,由于某种原因,每次我输入未知命令时,我都会收到两次命令未找到的信息:
例如,如果我输入“失败”
zsh: fail: command not found...
zsh: command not found: fail
我一生都无法弄清楚为什么会出现这种情况,也无法找到其他似乎遇到此问题的人。也许我的 Google-fu 不够强大,但任何指示将不胜感激。
到目前为止,我的 .zsh 只是基本的:
HISTFILE=~/.histfile
HISTSIZE=10000
SAVEHIST=10000
bindkey -e
zstyle :compinstall filename '/home/bmgraves/.zshrc'
autoload -Uz compinit
compinit
与bash:
bash: fail: command not found...
tcsh:
fail: Command not found.
print $+functions[command_not_found_handler]
+zsh:2> print 1
1
zsh -x:
+zsh:7> fail
+command_not_found_handle:1> local 'runcnf=1'
+command_not_found_handle:2> local 'retval=127'
+command_not_found_handle:5> [[ $- -regex-match i ]]
+command_not_found_handle:8> [ '!' -S /var/run/dbus/system_bus_socket ']'
+command_not_found_handle:11> [ '!' -x /usr/libexec/packagekitd ']'
+command_not_found_handle:14> [ ']'
+command_not_found_handle:17> [ 1 -eq 1 ']'
+command_not_found_handle:18> /usr/libexec/pk-command-not-found fail
zsh: fail: command not found...
+command_not_found_handle:19> retval=127
+command_not_found_handle:26> return 127
zsh: command not found: fail
答案1
当没有找到命令时,zsh 调用该函数command_not_found_handler
。此函数的典型用途是建议一种安装该命令的方法(如果该命令属于某个软件包的一部分,而该软件包是您的发行版的一部分但尚未安装)。
在 zsh 中,如果函数返回非零状态,zsh 会打印其通常的错误消息。 Bash 有类似的功能(该函数被称为command_not_found_handle
),但略有不同:在 bash 中,如果命令返回非零状态,bash 不会打印错误消息。
从跟踪来看,你似乎正在使用哦我的zsh。它正在调用pk-command-not-found
,这是 Fedora 的命令未找到处理程序,并且会打印自己的错误消息,因为它是为 bash 设计的。我没有看到一种明显的方法来抑制其中一条错误消息。如果这确实让您烦恼,您可以command-not-found
从 oh-my-zsh 配置中删除该插件(在这种情况下,如果存储库中提供但未安装包含命令的包,则不会提示您安装)。