如何有效的管理较少使用的 shell command - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
AntiGameZ
V2EX    程序员

如何有效的管理较少使用的 shell command

  •  
  •   AntiGameZ 2020-02-14 02:14:52 +08:00 5621 次点击
    这是一个创建于 2067 天前的主题,其中的信息可能已经有所发展或是发生改变。
    平时有一些 shell 命令(比如用 curl 请求某个地址获取一个状态)。使用频率不高,可能几周才会用到一次。原本都是自己起个名字存为 alias。但是实际操作来看,虽然用 alias 命令是短了很多,但是因为用得少,忘的依旧快。

    现在土办法直接 local 存了一个文本文件去管理这些 shell 命令,统计了一下,大概有 300 来个不同的命令。

    如果 shell 里也有类似 Postman 一样的请求管理就好了,可以按照 collection 对不同的命令进行分类管理,要用的时候打开运行一下就行。目前我是 iTerm2 + zsh

    不知道大佬们有什么经验可以指教一下,谢谢。
    46 条回复    2020-02-16 13:18:20 +08:00
    msg7086
        1
    msg7086  
       2020-02-14 02:26:09 +08:00 via Android
    不如写成脚本?然后可以分目录存放了,还能扔进源代码管理。
    AntiGameZ
        2
    AntiGameZ  
    OP
       2020-02-14 02:48:40 +08:00
    @msg7086 是有这么做,但是最终问题变成一样的了。

    之前我是这么做的:
    * 一行的命令我给起个 alias
    * 复杂的命令,我给写成一个脚本保存为一个文件,再弄一个 alias 去调用他
    然后我就得到了一堆 alias。然后某天我想做某事的时候,只记得自己有这么一个 alias,但是具体是哪个还得查记事本。

    后来尝试把 alias 的名字按照下划线分割进行归类,比如 service_action_description 这种方式。这样做的好处就是搜历史记录以及联想的时候效率高一些,但是也还是没有解决根本问题。
    fuermosi777
        3
    fuermosi777  
       2020-02-14 02:57:29 +08:00
    要是有一个轻型的运行在 menubar 的 command manager 软件就好了。需要运行时直接快速搜索回车复制或者 call terminal run。要是有时间我就自己写一个。但是没时间。
    charlie21
        4
    charlie21  
       2020-02-14 03:13:35 +08:00 via iPhone
    sqlite
    msg7086
        5
    msg7086  
       2020-02-14 03:23:33 +08:00
    我没听明白,为啥你都有脚本了还要写 alias ?
    AntiGameZ
        6
    AntiGameZ  
    OP
       2020-02-14 03:37:22 +08:00
    @msg7086 可能我没说明白

    curl 请求一个地址是一条命令
    运行一个脚本也是一条命令

    我的目的是在想调用我想运行的命令 /脚本,并且尽可能有个树形结构可以方便的让我去浏览我有哪些脚本,而不是靠记忆或者查一个记事本,大概这样的一个需求。
    AntiGameZ
        7
    AntiGameZ  
    OP
       2020-02-14 03:38:07 +08:00
    @fuermosi777 应该是有的,我之前用过一段时间 Paste,但是随着命令变得多了(比如我现在有 300 来个),就不是很好管理了,还不如记事本
    wzxlovesy
        8
    wzxlovesy  
       2020-02-14 04:34:52 +08:00 via Android   3
    navi
    wzxlovesy
        9
    wzxlovesy  
       2020-02-14 04:35:33 +08:00 via Android   2
    Livid
        10
    Livid  
    MOD
    PRO
       2020-02-14 05:16:02 +08:00 via iPhone   1
    可以用一个 CLI framework 写一个入口:

    https://docs.builtoncement.com/
    AntiGameZ
        11
    AntiGameZ  
    OP
       2020-02-14 05:31:14 +08:00
    @wzxlovesy 谢谢

    @Livid 简单看了一下 Cement 的文档,感觉可行, 谢谢。
    wweir
        12
    wweir  
       2020-02-14 06:01:29 +08:00 via Android
    subcommand prefix search
    reverse search
    Livid
        13
    Livid  
    MOD
    PRO
       2020-02-14 06:32:42 +08:00 via iPhone
    @AntiGameZ 用这样的框架包了之后,就可以用这种方式来找你想要的指令:

    --help|grep
    mrytsr
        14
    mrytsr  
       2020-02-14 06:51:25 +08:00 via Android
    ctrl-r
    rayhy
        15
    rayhy  
       2020-02-14 07:05:09 +08:00 via Android
    单行命令就一行行保存到一个文件里,用的时候用 fzf 搜一下并执行?
    conn4575
        16
    conn4575  
       2020-02-14 07:25:08 +08:00 via Android
    我都是把这种语言自己写的一些小函数都放在一个 toolkit 的仓库里,要用的时候去复制黏贴
    Sainnhepark
        17
    Sainnhepark  
       2020-02-14 07:41:25 +08:00 via Android
    我的解决方法是一个自己写的 tmux 插件,用 fzf 来管理 tmux. 有个 feature 就是自定义一堆命令,然后用 fzf 去选。

    https://github.com/sainnhe/tmux-fzf
    wupher
        18
    wupher  
       2020-02-14 08:22:52 +08:00
    TextExpander 你可以就用 alias,然后分组,标签,说明,应该足够管理了吧。

    也可以用 gist 做 snippet 管理
    itechify
        19
    itechify  
    PRO
       2020-02-14 09:02:42 +08:00 via Android
    对于这种可以复制粘贴的,我都记录到 ditto 里面分组及备注关键字,设置禁止自动移出。有点问题的是这个同步略麻烦
    mcfog
        20
    mcfog  
       2020-02-14 09:04:11 +08:00 via Android
    fzf 直接搜索 history 不就可以了( c-r )
    jorneyr
        21
    jorneyr  
       2020-02-14 09:19:39 +08:00
    可以试试这个,分组管理命令,点击后在终端执行: http://fitztrev.github.io/shuttle/
    omph
        22
    omph  
       2020-02-14 10:36:30 +08:00
    copyq
    有什么好用的命令或脚本可以分享一下啊~
    WittBulter
        23
    WittBulter  
       2020-02-14 11:05:45 +08:00   1
    我写了一个从请求解析运行的 shell,其他的命令都放在 github 管理,这样本读只存一个命令。
    你可以参考一下 fork 自己玩: https://github.com/unix/want
    Chingim
        24
    Chingim  
       2020-02-14 11:15:15 +08:00 via Android   1
    fzf
    终端内列出历史记录模糊搜索
    jessun1990
        25
    jessun1990  
       2020-02-14 11:18:38 +08:00   1
    我能想到的有以下几种:

    1. 使用 fish shell,会自动补全历史命令。

    2. 使用 snippet lab 来存储 shell 命令

    3. 使用 mac 上的 paste 或者 linux 上的 copyq 之类的剪贴板工具存储 shell 命令
    hqs0417
        26
    hqs0417  
       2020-02-14 11:24:22 +08:00   1
    alfred 上的 snippets
    vimsucks
        27
    vimsucks  
       2020-02-14 11:27:57 +08:00 via Android   1
    markx
        28
    markx  
       2020-02-14 11:45:54 +08:00
    我是用的 fzf 和 zsh 的 history-substring-search 来搜索历史,基本上够用了。
    rookiebulls
        29
    rookiebulls  
       2020-02-14 13:44:59 +08:00 via iPhone
    试试 tldr
    AntiGameZ
        30
    AntiGameZ  
    OP
       2020-02-14 16:01:57 +08:00
    @mrytsr
    @mcfog

    ctrl + r 或者模糊搜索的一个前提条件是大概知道搜什么。我手头的一个例子如果用 ctrl + r 就不大好对付:

    命令都是 curl,参数都一样,唯独请求的 url 不同。但是 url 十分相似,所以搜索的时候除非我提前知道自己是需要 curl + 某个特定 url 作为关键字,不然的话很难定位到。

    但是呢同样的需求在 Postman 里面就管理的很好。目前的想法还是得找一个或者自己写一个类似入口管理的东西,把脚本 /命令按照用途分类,有树形视图可以选择执行。
    mcfog
        31
    mcfog  
       2020-02-14 16:40:46 +08:00 via Android
    @AntiGameZ 如果就是要加点别的关键字的话,加在#后面就行了
    aijam
        32
    aijam  
       2020-02-14 17:21:42 +08:00
    alias alias='alias | less'
    aijam
        33
    aijam  
       2020-02-14 17:22:56 +08:00
    @aijam 把这一行加入.bashrc。忘 alias 了,就输入 alias 查询下。
    Nick66
        34
    Nick66  
       2020-02-14 17:59:39 +08:00
    我也是 iTerm2 + zsh,可以安装这个两个插件,命令很长不怕,输入一次就有记录,下次输入有提示 https://linux.hellocode.name/tool.html
    zthxxx
        35
    zthxxx  
       2020-02-14 18:07:46 +08:00   1
    和这个帖子的需求很像 /t/623793

    可以试试 zsh-history-enquirer 这个工具

    https://github.com/zthxxx/zsh-history-enquirer
    Hoshizora
        36
    Hoshizora  
       2020-02-14 20:00:54 +08:00 via Android
    alias 不是可以用 alias 命令看的吗,另外 zsh 有历史命令的插件,可以打一部分命令后以灰色显示历史命令,比如曾经输入过 git clone xxxx,那当输入 gi 的时候就会显示整条命令,按下 tab 或者方向右键就输入完了
    ooops
        37
    ooops  
       2020-02-14 21:25:02 +08:00
    感觉 Alfred 的 Snippets 比较符合需求。
    ps1aniuge
        38
    ps1aniuge  
       2020-02-14 21:33:49 +08:00
    @AntiGameZ 这个功能还有人需要么?我打算为楼主用 powershell 开发这个功能,每人众筹给我 5 毛钱即可!

    想要楼主说的功能的人,看过来,看过来:
    1 必须用 powershell。
    2 支持 win,linux,mac。
    3 纯中文,当然英文也可。
    4 可以光标上下选择,
    5 暂时不支持子菜单。
    6 预计是支持, [按快捷键] 呼出,功能的。

    愿意使用并掏钱的人,进来 mark 下,谢谢。
    Kobayashi
        39
    Kobayashi  
       2020-02-14 23:05:49 +08:00 via Android
    直接补全历史,搜个关键词就完了。ZSH history-search-multi-word。
    UnknownR
        40
    UnknownR  
       2020-02-15 00:40:25 +08:00
    写个汇总的 customalias,把你需要用到的 command 都写成一个个 method,再写个 help 的 property,每个 alias 都可以加上关键字,用法和描述之类的 property,这样你需要管理的就是这一个 customalias,用的时候用 help 看有哪些 method,直接用 grep 来滤关键字然后再调用方法来跑这个 command
    9
        41
    9  
       2020-02-15 01:59:37 +08:00
    @rayhy
    @Sainnhepark
    @mcfog
    @Chingim
    @markx

    请教下,如果是管理多台机器,有什么方法可以在多台机器上都能用到 fzf 的能力?
    AntiGaeZ
        42
    AntiGameZ  
    OP
       2020-02-15 04:25:30 +08:00
    @Hoshizora alias 只是输出一个列表,无法对很多数量的 alias 进行归类。
    历史记录也需要起码使用的人知道一部分的关键字。但是因为我会需要用到很多低频率( 2,3 个月才用一次)的脚本,有时候可能根本连 keyword 都记不住,或者因为 keyword 太过于普通,导致搜出来的记录很多,从中挑选也很麻烦。
    alan0liang
        43
    alan0liang  
       2020-02-15 07:20:30 +08:00 via Android
    我一般记住前几个字母然后直接输入之后用自动补全(打上键)
    jinliming2
        44
    jinliming2  
       2020-02-15 18:47:05 +08:00 via iPhone
    .bash_profiles 里写一个 function
    fatestigma
        45
    fatestigma  
       2020-02-16 04:33:16 +08:00
    我感觉我很多都是写在了 ~/bin 里,然后写上一些功能注释,最后用 rg 在整个文件夹里面搜注释或关键词。
    laxenade
        46
    laxenade  
       2020-02-16 13:18:20 +08:00   1
    我之前也有这样的问题,后来我自己花了 2 天时间写了一个简单的 node 脚本来管理。基本思路是跑完一个脚本之后,立马把它存起来(例如 snippet save <名字> --tag <...> --description <...> !!),就我的 use case 来讲完全够用了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2397 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 15:37 PVG 23:37 LAX 08:37 JFK 11:37
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86