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

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

  •  
  •   AntiGameZ · 2020-02-14 02:14:52 +08:00 · 5015 次点击
    这是一个创建于 1505 天前的主题,其中的信息可能已经有所发展或是发生改变。
    平时有一些 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
       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
       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 管理
    oneisall8955
        19
    oneisall8955  
       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 的能力?
    AntiGameZ
        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   ·   我们的愿景   ·   实用小工具   ·   1117 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 18:48 · PVG 02:48 · LAX 11:48 · JFK 14:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.