18次发布
0.5.1 | 2024年4月15日 |
---|---|
0.4.1 | 2023年9月1日 |
0.3.4 | 2023年1月12日 |
0.3.2 | 2022年11月5日 |
0.1.5 | 2021年10月14日 |
在 命令行界面 中排名第92
每月下载量达982次
2MB
1K SLoC
lk
概述
bash函数的命令面板。在包含大量bash文件的目录中运行,模糊查找函数并运行它。它看起来像这样
模式
您可以通过三种不同的方式探索您的bash函数
-
终端用户界面(TUI),它占据整个终端窗口
-
类似于
fzf
的行内搜索 -
通过打印函数列表。
TUI
默认模式(--tui
或-t
)。
这是在它的自己的仓库上运行的lk
。
它具有模糊查找:
您按回车键运行函数。
行内模糊查找
旧的默认设置(--fuzzy
或-f
)
这显然也具有模糊查找
列表
您还可以通过列表模式(--list
)探索bash文件,如下所示
您可以深入这些文件以查看它们有哪些函数。注意,您现在不需要--list
您可以通过传递函数名称来执行这些函数
这意味着如果您想的话,可以编写使用lk
的脚本
更改默认模式
您可以通过编辑位于lk
的配置文件来更改默认模式,该文件位于~/.config/lk/lk.toml
日志文件也位于该目录中,如果您感兴趣或想为lk
的开发做出贡献。显然,您可以通过运行lk --help
来查看所有lk
选项。
为什么使用lk
?
- 您是一位多语言工程师,对包管理感到疲惫。因此,您想将所有内容都隐藏在bash之后,bash是通用语言。
- 您做了很多devops,并且有很多bash。
- 您有很多项目,您每个月都不会工作,您需要将这些项目重新访问时的体验保持一致。
- 您可以使用
make
和PHONY
在项目中执行非编译任务。lk
只允许您编写没有所有make
特定垃圾的正确的 bash。 - 您是否曾从您某处保存的文本文件中复制和粘贴 bash。
安装
Homebrew
brew tap jamescoleuk/taps
brew install lk
Cargo
cargo install lk
如何编写与 lk
兼容的 bash 文件
lk
执行 bash 函数。这类事情
# A glorious function that does all the things
be_glorious() {
echo "Ta da!"
}
它通过源文件执行这些函数,然后运行函数。这相当于
. my_file.sh
be_glorious
这意味着函数之外的所有内容都将被执行。如果您想源其他文件或设置环境变量,这将很有用,因为它们将可供您的函数使用。例如
#!/usr/bin/env bash
#
# Some comments.
. "~/scripts/lib.sh"
readonly DATABASE_USER="johnsmith"
# A glorious function that does all the things
be_glorious() {
echo "Database user is ${DATABASE_USER}"
}
但这确实意味着您的脚本中的大部分功能内容都需要在函数中。我理解这可能不是每个人都想要的工作方式,但对于许多用例来说是可以的。我最不想做的事情是告诉人们如何编写他们的脚本。
顺便说一句,上述脚本中的注释将在 --list
模式下出现,如下所示
因此 --list
模式允许您探索和发现您的脚本,而 --fuzzy
模式则允许您访问您可能已经更加熟悉的函数。
如果您使用 --fuzzy
,则 lk
将将您执行的命令写入您的 bash 历史记录,这样您可以使用 ctrl-r
重新执行它。显然,如果您使用了 --list
,它已经在那里了。
忽略文件
lk
支持基于 glob 的排除和包含,使用 toml。例如
excludes = [
"**/exclude_me",
"target",
".git",
]
您可以通过将其放入 ~/.config/lk/lk.toml
来使此设置全局,或者通过在,例如,项目目录中创建一个 lk.toml
文件来使其局部。如果 lk.toml
文件位于您执行 lk
的同一目录中,则它将找到并使用它。您还可以将包含和排除作为开关添加。有关详细信息,请参阅 lk --help
。
忽略函数
如果您在函数前加一个下划线,则 lk
将忽略它
_my_ignored_function() {
echo "not happening"
}
安装
从 crate
cargo install lk
更新
cargo install --force lk
用例示例
- AWS
- 您需要从 AWS 拉取配置并将其存储在
.env
文件中。 - 您需要在 AWS 环境之间切换
- 您需要从 AWS 拉取配置并将其存储在
- 您需要构建和部署许多服务,并希望隐藏边缘情况。例如,对于编译、构建和部署,您可能拥有
lk my_service jfdi
。 - 您需要定期设置 SSH 隧道,但记不住命令。
为什么名字叫“lk”?
如果您有任何打字员主键纪律,并且如果您在键盘上挥动右手,那么您很可能输入“lk”。所以它很短,且符合人体工程学。
有哪些可以改进的地方?
- 轻微的 UI 改进?
- 支持其他语言的脚本,例如 Python、rust-script、Typescript。
- 为色盲人士禁用颜色
- 向
lk --fuzzy
添加计数 - 合理的默认忽略
- 使其可通过其他途径安装,例如
brew
。
贡献使我感到温暖。我很乐意支持任何希望做出贡献的人。此外,如果您是 Rust 的新手,我很乐意在您需要的范围内深化这种支持。
灵感
我之前已经编写了两个类似的工具
run_lib
仍然有其用途。我曾在一个无法安装二进制文件的安全环境中工作。 run_lib
只是一个bash脚本。
fzf 真是太棒了。在 lk
中的 --fuzzy
选项来自于我使用 fzf
在我的shell历史中进行多年的 ctrl-r
模糊查找。我几乎没有实现这个功能,因为我认为“为什么麻烦?fzf 已经做得非常完美了。”或者更准确地说,我考虑过从 lk
通过管道到 fzf
。但将功能原生实现是 lk
正确的做法。但你可能会注意到,lk
中模糊搜索的渲染在视觉上受到了 fzf
的很大启发。 fzf
,我爱你。
贡献
欢迎贡献。感谢以下人员
依赖项
~14–25MB
~360K SLoC