当您输入错误命令时,请说您想要执行以下操作:
$ cd ..
$ ls
Run Code Online (Sandbox Code Playgroud)
但相反,您键入得太快并最终在 l 和 s 之间按 Enter,因此您会得到:
$ cd ..
$ l
sbash: l: command not found...
Run Code Online (Sandbox Code Playgroud)
当然,当我们快速打字时,这种情况总是会发生。我很好奇的是屏幕上出现错误命令文本后 2.5 秒(在我的系统上)暂停的来源。在我看来,它会立即识别错误的命令,打印有关它的错误消息,但只是为了好玩等待 2.5 秒,然后再返回命令行。这是什么原因造成的?有没有办法解决这个问题?这是一个小烦恼,但我想摆脱它。:)
编辑:运行 Fedora 16 系统
Zor*_*che 43
这种类型的行为是由一些经常安装在挂钩到 bash 的发行版上的工具引起的。这个钩子使得如果你尝试运行一个命令,而该命令不存在,那么 bash 将搜索配置的存储库中可用的文件,并告诉你需要安装什么包来获取该命令。
如果您不在 Debian 系统上,您将需要查看 bash 启动文件配置文件等,看看是否有任何内容定义了名为command_not_found_handle. 如果定义了该 bash 函数,那么每当您运行命令并且在您的搜索路径中找不到合适的程序时,它就会被调用。如果您运行typset | less并浏览输出,您将看到command_not_found_handle()已定义的函数。
在 Debian/Ubuntu 上,提供此行为的包是command-not-found。如果您清除它,那么您将禁用会减慢速度的查找。
这是一个例子
# command-not-found installed
$ time pwgen
The program 'pwgen' is currently not installed. To run 'pwgen' please ask your administrator to install the package 'pwgen'
pwgen: command not found
real 0m0.074s
user 0m0.032s
sys 0m0.040s
# purge command-not-found and restart bash
$ time pwgen
-bash: pwgen: command not found
real 0m0.002s
user 0m0.000s
sys 0m0.000s
Run Code Online (Sandbox Code Playgroud)
确切的时间当然对你来说会有所不同。我在一个非常强大的服务器上运行了我的测试。
部分问题是“有没有办法解决这个问题(在 Fedora 中)?” 有:在 .bashrc 文件的底部添加命令
unset command_not_found_handle
您可能希望在 .bashrc 的末尾(或接近它)执行此操作,因为您可能正在 .bashrc 的顶部运行 /etc/bashrc 或其他 bash 脚本。
在 Fedora 上,可以通过更改/etc/PackageKit/CommandNotFound.conf配置文件来控制此行为。
设置SoftwareSourceSearch=false将消除延迟,因为它不会尝试使用包管理器查找缺少命令的包。
您还可以更改等待包搜索的时间量,而不是通过更改MaxSearchTime=2000选项来指示您愿意等待包搜索返回匹配项的毫秒数。我发现默认的 2 秒不足以返回任何匹配项,并且只会在您输入错误时导致不必要的延迟。
要么提高MaxSearchTime以提供有用的输出,要么禁用SoftwareSourceSearch以完全消除延迟。
| 归档时间: |
|
| 查看次数: |
2401 次 |
| 最近记录: |