V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
x97bgt
V2EX  ›  程序员

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

  •  
  •   x97bgt · 2020-11-24 11:46:47 +08:00 · 2711 次点击
    这是一个创建于 1464 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    23 条回复    2020-11-24 16:05:19 +08:00
    beryl
        1
    beryl  
       2020-11-24 11:49:07 +08:00
    那可能只能是 bash 是最优选择吧
    dzdh
        2
    dzdh  
       2020-11-24 11:50:05 +08:00
    你需要 go
    20498860
        3
    20498860  
       2020-11-24 12:01:12 +08:00
    我前几天也在问这个问题哈

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

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

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

    只是我想找一个取巧的方法。。。
    zhuangzhuang1988
        6
    zhuangzhuang1988  
       2020-11-24 12:30:11 +08:00
    换 powershell
    代码可读 可调试 有 ide 加成, 跨平台 功能强大
    Tumblr
        7
    Tumblr  
       2020-11-24 12:34:13 +08:00   ❤️ 1
    换 pwsh 吧,写成 module,非常方便,还有很强的可移植性。
    @20498860 #3 你的这个需求,Windows 平台上明显转 PowerShell 啊( PowerShell 完全包含了 cmd 命令)。
    loading
        8
    loading  
       2020-11-24 12:36:00 +08:00 via Android
    不如做个男人( man )?
    dzdh
        9
    dzdh  
       2020-11-24 12:40:53 +08:00
    @x97bgt 修修改改很正常啊 建个 git jenkins 自动构建然后分发到所有机器没毛病啊
    UN2758
        10
    UN2758  
       2020-11-24 12:43:58 +08:00
    说起来我也是
    liberty1900
        11
    liberty1900  
       2020-11-24 12:44:28 +08:00 via Android
    写好了发个 github repo, 我们就可以白嫖了
    guxingke
        12
    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
        13
    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
        14
    no1xsyzy  
       2020-11-24 13:32:28 +08:00
    我觉得需要一个 words prefix 的补全是最好了,最好支持 history 分析。
    就像 JB 家那样
    sudo apt install 可以 sai<tab> 或者 sudai<tab> 这样,前 N 分段各取长度至少为 1 的前缀
    说不定可以写一个……
    no1xsyzy
        15
    no1xsyzy  
       2020-11-24 13:33:34 +08:00
    大概可以写一个类似 thefuck 那样的工具,不然嵌入 shell 有点困难……
    还是说 fish 有这种了?
    fzinfz
        16
    fzinfz  
       2020-11-24 13:35:34 +08:00
    以上 3 例子举错了,更正:f() { [ -z "$1" ] && read -p "P1: " p || p=$1; echo $p; } # 只适合少参数简单情况
    xiaochun41
        17
    xiaochun41  
       2020-11-24 14:21:38 +08:00
    似乎是需要一个好用的 shell 环境,比如 zsh + oh-my-zsh
    wellsc
        18
    wellsc  
       2020-11-24 14:41:35 +08:00 via iPhone
    放到 dotfiles 里不就好了
    lamCJ
        19
    lamCJ  
       2020-11-24 15:05:41 +08:00
    我觉得如果只是个人用的一些小脚本的话没必要单独包装成命令行 一般单独发布的命令行都是比较通用的公用工具

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

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

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

    命名讲究点应该不至于回忆不起干啥的
    omph
        20
    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)
    x97bgt
        21
    x97bgt  
    OP
       2020-11-24 15:44:22 +08:00
    @omph 这个看着不错,研究一下
    x97bgt
        22
    x97bgt  
    OP
       2020-11-24 15:45:32 +08:00
    @lamCJ
    @wellsc 命令多了杂了,连名字都记不住。这是最头疼得
    jinhan13789991
        23
    jinhan13789991  
       2020-11-24 16:05:19 +08:00
    分目录和文件名存放,然后里面写好注释~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3574 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:53 · PVG 18:53 · LAX 02:53 · JFK 05:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.