• 请不要在回答技术问题时复制粘贴 AI 生成的内容
17681880207
V2EX  ›  程序员

记不住各个平台的 Shell 命令,我搓了个不到 30KB 的小工具: ash

  •  
  •   17681880207 · 4h 27m ago · 582 views

    平时在终端里干活,有两个事情我经常觉得头大:

    一是记不住复杂参数。比如查个占用端口的进程、按修改时间搜一批文件、或者解压某个不常见的压缩包,隔三差五就得切到浏览器搜一下。
    二是跨系统命令转换。查资料时网上往往只贴了 Linux (Bash) 命令,但我手头如果在 Windows (PowerShell) 下,有些管道符和参数根本跑不起来,还得手动翻译一遍。

    市面上其实有不少终端 AI 工具,但我试了一圈发现不太适合我:

    1. 太重:动辄装几百兆的环境或依赖。
    2. 喜欢自作主张:很多工具直接就把生成的命令跑了。说实话,让 AI 拿终端权限我心里总犯怵,万一哪条参数理解偏了把文件删了或者服务杀了,排查起来更痛苦。

    于是周末我自己搓了个小 CLI:**ai-shell-helper**(命令行里直接敲 **ash**)。


    它的设计思路很简单

    1. 只生成,不执行:输入需求,它返回一条针对当前环境最合适的可执行命令,同时自动拷进剪贴板。我扫一眼确认没毛病,自己 Ctrl + V 回车执行。
    2. 支持跨 Shell 转换:默认会自动识别你的操作系统( PowerShell / cmd / Bash / Zsh / Fish 都可以),也可以手动用 ash target 指定。把 Bash 命令直接丢给它,它能转成 PowerShell 等价命令。
    3. 兼容所有 OpenAI 格式接口:自己填 Base URL 、Key 和 Model 。我自己日常接 DeepSeek ,几分钱能用很久,速度也快。
    4. 轻量:依赖只有交互 prompt 和剪贴板工具,解压后 27KB 左右,Node 18+ 原生 fetch 请求,没有多余的黑魔法。

    几个典型用法

    1. 自然语言要命令

    直接敲 ash,输入人话:

    ash
    >>> 把当前目录及其子目录下所有的 .log 文件找出来并删除
    Get-ChildItem -Recurse -Filter *.log | Remove-Item
    

    输出出来的命令已经在剪贴板里了,看一眼没问题直接粘贴回车。

    2. 贴别人的命令让它转语法

    比如你在 Windows 上,从网上搜到一条 Linux 命令:

    ash
    >>> grep -rn "TODO" ./src
    Select-String -Path ./src/* -Pattern "TODO" -SimpleMatch
    

    它会根据你设定的目标 Shell 转换成可用的语法。

    3. 当做终端里的快速问答

    有时候不需要生成命令,只是想随口问个技术问题,带 -c 参数就行:

    ash -c
    >>> nginx 的 301 和 302 重定向在配置上有啥区别
    

    如果是在排查一个连续的问题,可以用 -lc 进入多轮对话模式。

    这里我做了一个类似 Claude Code /compact 的机制:如果多轮聊得太长、历史上下文堆得比较多,它会在后台自动做一次摘要压缩,把前面的对话提炼成一段简短上下文,既防止 Token 越聊越贵,也能避免超出模型的上下文窗口。


    安装与配置

    需要 Node.js >= 18:

    npm install -g ai-shell-helper
    

    第一次用的时候,跑一下初始化:

    ash init
    

    会提示输入三个信息:

    平时常用命令就这几个:

    • ash:生成命令 / 转换命令
    • ash target:切换当前的目标 Shell ( PowerShell / cmd / bash / zsh / fish )
    • ash clipboard [on|off]:开关自动进剪贴板
    • ash -c:单轮问答
    • ash -lc:多轮对话( Ctrl+C 退出)
    • ash reset:清空配置

    配置信息保存在本地 ~/.ash/config.json,不会上传任何其他东西。


    代码和文档都在 GitHub 上,MIT 协议。如果你也有经常记混参数或者跨平台查命令的习惯,可以试一下,有什么建议也欢迎提 issue 。

    7 replies    2026-09-08 21:51:24 +08:00
    mMartin
        1
    mMartin  
       4h 21m ago
    没有 ai 的时候这个工具就很出名了: https://github.com/tldr-pages/tldr
    Binwalker
        2
    Binwalker  
       4h 18m ago
    有一个更好用的:
    https://github.com/tldr-pages/tlrc
    ob
        3
    ob  
       3h 38m ago via Android
    @mMartin
    @Binwalker 怎么有两个
    jimyag
        4
    jimyag  
       3h 18m ago
    https://github.com/jimyag/askshell 之前做过一个 shell 工具,输入 ?问题就可以向他提问,他会回答你的问题给出命令执行。 原理就和写了一个 bash 的 function 一样简单,只不过加了一些可以读取之前执行命令和结果的功能。
    Binwalker
        5
    Binwalker  
       2h 53m ago
    @ob tlrc 是用 rust 重写的,更好用
    loading
        6
    loading  
       2h 45m ago via Android
    没有加 fuck 特性吗?

    https://github.com/nvbn/thefuck
    beyondstars
        7
    beyondstars  
       2h 33m ago
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1672 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 16:24 · PVG 00:24 · LAX 09:24 · JFK 12:24
    ♥ Do have faith in what you're doing.