#command #found #command-line #shell-environment #hook #execute-command #command-not-found

bin+lib cnf

不依赖发行版的 '命令未找到' 处理程序

9 个不稳定版本 (4 个破坏性更新)

0.5.1 2024年2月11日
0.5.0 2023年12月27日
0.4.2 2023年8月24日
0.3.0 2023年5月20日
0.1.0 2022年1月31日

#691 in 命令行工具

Download history 2/week @ 2024-04-04 1/week @ 2024-04-25 1/week @ 2024-05-23 1/week @ 2024-05-30 5/week @ 2024-06-06 5/week @ 2024-06-13

每月下载量 58 次

GPL-3.0 或更高版

295KB
5K SLoC

cnf - 一个 "命令未找到" TUI 应用程序

application view

cnf 提供必要的转换,以便从各种来源查找命令。查看 可用的提供者列表可用的环境列表,了解 cnf 如何帮助您。

基本工作原理是,一旦调用 cnf,它将在所有配置的环境(见上方)中查询所有配置的提供者(见上方),并在基于终端的交互式 UI 中以树状结构显示结果。此列表可以用于检查、安装和执行结果。

此过程可以通过显式调用 cnf 可执行文件,或通过钩入您的 shell(目前支持 bashzsh)隐式/自动地调用。有关更多信息,请参阅 cnf --hooks bash/zsh 的输出。

使用示例

以下示例假定您已安装 cnf 和必要的 shell 钩子,如下所述。如果您尚未安装,您必须在相关的命令行前加上 cnf

cnf 与 toolbx 一起使用

如果您是 toolbx 用户,cnf 可以帮助您在主机和选择的 toolbx 容器之间透明地转发命令。以下是一个 cnf 如何替代 toolbox run 的示例。

# Before
$ htop
htop: command not found
$ toolbox run htop
# After
$ htop
# ... navigate the UI and execute

它也可以反过来工作。假设您目前在 toolbx 中,并想在主机上执行命令。以下是一个 cnf 如何替代 flatpak-spawn --host 的示例。

# Before
⬢ $ podman run hello-world
podman: command not found
⬢ $ flatpak-spawn --host podman run hello-world
# After
⬢ $ podman run hello-world
# ... navigate the UI and execute

命令别名

默认情况下,cnf会显示包含所有结果的交互式TUI,使用户可以浏览结果并选择合适的一个。当重复调用同一命令时,每次都与UI交互会很快变得烦人。

命令别名是一种旨在解决两个问题的机制

  1. 消除某些命令与UI的用户交互(根据用户选择)
  2. 通过在另一个环境中调用它们(例如toolbx/distrobox),提供当前环境中不可用的命令。

要了解更多信息,请访问别名文档

安装

目前还没有预构建的应用程序二进制文件,所以您必须通过cargo进行安装

$ cargo install --locked cnf

如果您想在找不到特定命令时自动运行cnf,则可以像这样扩展您的.bashrc/.zshrc

# If you're using bash, append this to '~/.bashrc'
eval "$(cnf --hooks bash)"
# Likewise for zsh, append this to '~/.zshrc'
eval "$(cnf --hooks zsh)"

如果您不知道您目前正在使用哪个shell,下面命令的输出应该会告诉您

basename $(readlink -f /proc/$$/exe)

现在重新启动您的shell或打开新的shell标签/窗口,并尝试一下!

配置

当您第一次运行此命令时,它将在~/.config/cnf/cnf.yml中创建一个默认配置文件。选项应该是自我解释的。如果不是,请参阅cnf配置模块

CNF和sudo

当运行带有sudo的命令时,您会发现显示默认的“命令未找到”文本。这是因为sudo执行自己的可执行查找,如果它找不到您要求执行的命令,它将打印此错误并退出。要修复此问题,您必须通过cnf手动调用sudo

$ sudo foobar
sudo: foobar: command not found
$ cnf !!

!!将由您的shell展开为最后一个执行的命令,包括所有参数。这样,您就直接将命令转发给cnf。 换句话说:您正在手动执行shell钩子的工作

依赖关系

~17-32MB
~436K SLoC