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 命令行工具
每月下载量 58 次
295KB
5K SLoC
cnf - 一个 "命令未找到" TUI 应用程序
cnf
提供必要的转换,以便从各种来源查找命令。查看 可用的提供者列表 和 可用的环境列表,了解 cnf
如何帮助您。
基本工作原理是,一旦调用 cnf
,它将在所有配置的环境(见上方)中查询所有配置的提供者(见上方),并在基于终端的交互式 UI 中以树状结构显示结果。此列表可以用于检查、安装和执行结果。
此过程可以通过显式调用 cnf
可执行文件,或通过钩入您的 shell(目前支持 bash
和 zsh
)隐式/自动地调用。有关更多信息,请参阅 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交互会很快变得烦人。
命令别名是一种旨在解决两个问题的机制
- 消除某些命令与UI的用户交互(根据用户选择)
- 通过在另一个环境中调用它们(例如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