为什么找不到命令后延迟很长时间?

为什么找不到命令后延迟很长时间?

通常,当我错误输入诸如 ls 之类的命令时(例如,在输入“s”之前按 ENTER 键),终端显示后会出现很长(约 2 秒)的延迟:

bash: l: command not found...

我可以理解输入错误密码后出现类似延迟的原因,根据为什么输入错误的密码后会有很大的延迟?。但为什么要在无法识别的命令之后延迟呢?这也有影响FAIL_DELAY吗?/etc/login.defs

答案1

经过一些研究我发现:

  • 尝试卸载命令未找到的软件包,$>yum remove command-not-found然后再次安装它>$yum install command-not-found(以防万一您的系统上安装了该软件包)。

如果这没有帮助尝试:

  • 将其添加到您的~/.bashrc文件中:

    unset command_not_found_handle

答案2

我发现最好的解决方案,至少在Fedora上,是修改配置文件
/etc/PackageKit/CommandNotFound.conf

因为最大的延迟来自于搜索要安装的软件包,如果您 SoftwareSourceSearch=true修改 SoftwareSourceSearch=false

延迟几乎为 0,并且您仍然会收到有关拼写错误的警告,这可能很有用。

答案3

Fedora 使用类似的东西。

如果您只想删除此功能,请使用:

yum remove PackageKit-command-not-found

答案4

就我而言,这是因为 /usr/libexec/pk-command-not-found 中存在一些已知的代理错误

Failed to search for file: cannot update repo 'updates':
Cannot prepare internal mirrorlist:
Curl error (28): Timeout was reached for https://mirrors.fedoraproject.org/metalink?repo=updates-released-f28&arch=x86_64 
[Connection timed out after 30002 milliseconds]

我的代理配置是正确的,因为使用裸curl 命令下载完全相同的URL 会立即成功。

我检查了 pk-command-not-found 进程是否有代理配置:

tr  '\0' '\n' < /proc/$(pgrep -f pk-command-not-found)/environ | grep -i proxy

然而,由于某种未知的原因,它并没有使用它。

https://bugzilla.redhat.com/show_bug.cgi?id=1553368

相关内容