V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
x97bgt
V2EX  ›  程序员

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

  •  
  •   x97bgt · Nov 24, 2020 · 3187 views
    This topic created in 1980 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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

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

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

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

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

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

    命名讲究点应该不至于回忆不起干啥的
    omph
        20
    omph  
       Nov 24, 2020
    来,加个中间层
    [denisidoro/navi: An interactive cheatsheet tool for the command-line and application launchers]( https://github.com/denisidoro/navi)
    x97bgt
        21
    x97bgt  
    OP
       Nov 24, 2020
    @omph 这个看着不错,研究一下
    x97bgt
        22
    x97bgt  
    OP
       Nov 24, 2020
    @lamCJ
    @wellsc 命令多了杂了,连名字都记不住。这是最头疼得
    jinhan13789991
        23
    jinhan13789991  
       Nov 24, 2020
    分目录和文件名存放,然后里面写好注释~
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1138 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 91ms · UTC 23:08 · PVG 07:08 · LAX 16:08 · JFK 19:08
    ♥ Do have faith in what you're doing.