工作里写了很多 bash alias 和方法,有什么简易的方法可以把它们包装成命令行工具吗?

2020-11-24 11:46:47 +08:00
 x97bgt

现在 alias 和方法越来越多,后面连名字都记不住了,导致每次都要先用 alias 或 declare -F 看一下,再能回忆起来。

现在想把这些东西整一整,把它们聚合到一起,搞个 CLI 工具出来,名字和参数都规范一下,还可以打印帮助信息。

直接用 bash 写太恶心了,所以想找一个快速简易的方法。大家有没有什么好的建议?

最好是修改后不需要编译的,这样容易维护,毕竟只是脚本工具。

2615 次点击
所在节点    程序员
23 条回复
beryl
2020-11-24 11:49:07 +08:00
那可能只能是 bash 是最优选择吧
dzdh
2020-11-24 11:50:05 +08:00
你需要 go
20498860
2020-11-24 12:01:12 +08:00
我前几天也在问这个问题哈

https://www.v2ex.com/t/727846

linux 可以用 xterm.js ,windows 还没想到办法
x97bgt
2020-11-24 12:01:29 +08:00
@dzdh go 是个不错的选择,但修改后都要编译,这个麻烦不?。

关键是我对自己写的脚本没有信息,修修改改或加新功能是很经常的事。。。
x97bgt
2020-11-24 12:07:35 +08:00
@20498860 看描述还是有点不一样。我只是想把这些 alias 和方法包装成 unix-like,感觉比你的需求容易一点。

只是我想找一个取巧的方法。。。
zhuangzhuang1988
2020-11-24 12:30:11 +08:00
换 powershell
代码可读 可调试 有 ide 加成, 跨平台 功能强大
Tumblr
2020-11-24 12:34:13 +08:00
换 pwsh 吧,写成 module,非常方便,还有很强的可移植性。
@20498860 #3 你的这个需求,Windows 平台上明显转 PowerShell 啊( PowerShell 完全包含了 cmd 命令)。
loading
2020-11-24 12:36:00 +08:00
不如做个男人( man )?
dzdh
2020-11-24 12:40:53 +08:00
@x97bgt 修修改改很正常啊 建个 git jenkins 自动构建然后分发到所有机器没毛病啊
UN2758
2020-11-24 12:43:58 +08:00
说起来我也是
liberty1900
2020-11-24 12:44:28 +08:00
写好了发个 github repo, 我们就可以白嫖了
guxingke
2020-11-24 12:46:06 +08:00
zsh

====
$ alias | grep ^v

vm='vim ~/config/zsh-customs/plugins/me/me.plugin.zsh'
vv='vim ~/.vim/main.vim'
vz='vim ~/.zshrc'

$ functions | grep ^j

j () {
j11 () {
j12 () {
j13 () {
j15 () {
j8 () {

=====

也许可以满足你的需求
fzinfz
2020-11-24 13:03:31 +08:00
一些心得,供参考:
0. alias/declare -F 统一用 type, 可以少打很多字
1. 命名:比如 git_*
2. 整合:不修改系统的 function 为可 run+source 的单个.sh ,并高亮+打印 raw cmd:my_eval(){ echo_color "$@"; eval "$@"; }
3. alias/function 命名提示参数,或询问:[ -z "$1" ] && p=default || p=$1
4. 复杂的命令组合,写个命令行生成器,比如: https://html.ferro.pro/docker.html

参考我的 shell 大杂烩: https://github.com/fzinfz/scripts/tree/master/linux (目前还是太乱而且 bug 太多,轻喷)
no1xsyzy
2020-11-24 13:32:28 +08:00
我觉得需要一个 words prefix 的补全是最好了,最好支持 history 分析。
就像 JB 家那样
sudo apt install 可以 sai<tab> 或者 sudai<tab> 这样,前 N 分段各取长度至少为 1 的前缀
说不定可以写一个……
no1xsyzy
2020-11-24 13:33:34 +08:00
大概可以写一个类似 thefuck 那样的工具,不然嵌入 shell 有点困难……
还是说 fish 有这种了?
fzinfz
2020-11-24 13:35:34 +08:00
以上 3 例子举错了,更正:f() { [ -z "$1" ] && read -p "P1: " p || p=$1; echo $p; } # 只适合少参数简单情况
xiaochun41
2020-11-24 14:21:38 +08:00
似乎是需要一个好用的 shell 环境,比如 zsh + oh-my-zsh
wellsc
2020-11-24 14:41:35 +08:00
放到 dotfiles 里不就好了
lamCJ
2020-11-24 15:05:41 +08:00
我觉得如果只是个人用的一些小脚本的话没必要单独包装成命令行 一般单独发布的命令行都是比较通用的公用工具

你就只用 `alias` 简化一些比较长的常用命令(可能带一坨参数)

其他稍微复杂点的写成单独的可执行脚本 bash/go/python 都无所谓 放到统一的目录(`~/bin/`)配置到环境变量

最后所有这些都放进 dotfiles 个人库 已经够方便维护和分发了吧 都是些脚本配置下就能自动统一工作环境

命名讲究点应该不至于回忆不起干啥的
omph
2020-11-24 15:26:01 +08:00
来,加个中间层
[denisidoro/navi: An interactive cheatsheet tool for the command-line and application launchers]( https://github.com/denisidoro/navi)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/728654

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX