https://github.com/TBXark/shell-ask
直接从您的终端询问 LLM, 不离开终端直接让 AI 帮你解答终端的输出。或者生成你不熟悉的 shell 指令。一个 bash 脚本就能解决。
此脚本是用 bash 编写的,只需下载脚本并添加执行权限,该脚本依赖于curl
和jq
,请确保它们已安装在您的系统上!
curl https://raw.githubusercontent.com/TBXark/shell-ask/master/ask.sh > /usr/local/bin/ask
chmod +x /usr/local/bin/ask
ask set-config answer_language chinese
ask set-config api_key sk-xxxx
ask set-config api_model deepseek-chat
ask set-config api_endpoint https://api.deepseek.com/chat/completions
您也可以直接编辑 ~/.config/ask.sh/config.json
。
If you don't want to use a configuration file, you can set the configuration via environment variables.
export SHELL_ASK_API_KEY=xxx
export SHELL_ASK_API_MODEL=xxx
export SHELL_ASK_API_ENDPOINT=xxx
export SHELL_ASK_ANSWER_LANGUAGE=xxx
或者您可以通过设置 SHELL_ASK_CONFIG_FILE
环境变量来更改配置文件路径。
export SHELL_ASK_CONFIG_FILE=/path/to/config.json
根据问题生成 Shell 命令:
ask "What was my last git commit message?"
使用命令输出作为上下文:
ifconfig -a | ask "My local IP"
这个项目的灵感来自 egoist/shell-ask,但由于它依赖于 nodejs ,所以我决定用 bash 重写它
文档里的ask
后面双引号只是起装饰作用,其实没有什么意义,你可以直接输入提示词
➜ ~ ask what is my local ip
# /sbin/ifconfig | grep "inet " | grep -v 127.0.0.1 | awk '{print $2}'
➜ ~ ifconfig -a | ask What is my local IP
# Your local IP address is `192.168.31.200`. This is the IPv4 address listed under the `en0` interface with the status "active".
具体原理如下
在Shell脚本中,$* 是一个特殊变量,用于表示传递给脚本的所有参数。具体来说,$* 会将所有参数作为一个单独的字符串返回,其中参数之间由第一个字符的 IFS(内部字段分隔符)变量分隔。如果 IFS 未设置,则默认使用空格分隔参数
ask install-plugin https://raw.githubusercontent.com/TBXark/shell-ask/master/plugins/translate.sh
或者您可以手动安装插件到 ~/.config/ask.sh/plugins
目录中。
echo "你好" | ask -p translate english
#!/bin/bash
# echo "Location: $(pwd)"
# 您可以使用与 ask.sh 相同的上下文
# 插件脚本必须包含一个 gen_content 函数,该函数需要两个参数。第一个参数是用户输入,第二个参数是管道输入。
gen_content() {
question=$1 # target language
context=$2 # need translation text
# 只能有一个 /dev/stdin 输出。如果其他命令也会导致输出,则需要将它们重定向到其他地方。
echo "Translate the following text into $question: $context"
}
1
cdlnls 213 天前 via Android
这个工具的使用方法很有意思!
感觉可以扩展一下,在命令行中通过管道,经过一个程序之后,再从管道的另一段输出,就可以实现通过 AI 修改配置文件。不仅仅是让 AI 解析输出结果 |
2
RandyLuo 213 天前 via Android
我没记错的话,egoist 前天开源了一个一样的 bash 工具
|
3
RandyLuo 213 天前 via Android
|
4
RandyLuo 213 天前 via Android
抱歉,滑手机看到的,看到项目最底下的引用声明了
|
6
hitsmaxft 213 天前 via iPhone
我之前用 openai 辅助写了个 rust 实现的 gemini cli
|
7
hitsmaxft 213 天前 via iPhone
|
8
coolloves 213 天前
支持了,有点小小建议,可以考虑修改下,要不,每次输入还需要用引号,
ask() { local input="" local content="" local prompt="$@" #local prompt="$1" root@n1:/usr/local/bin# ip a |ask what is my local ip Your local IP address is 192.168.123.150. |
10
lekai63 213 天前 via iPhone
iterm2 最新版自带了这个功能,需 OpenAI key
|
11
tbxark OP @lekai63 是的,不过 3.5.0 有 BUG ,第三方 API 用不了,在等他 3.5.1 release 。我的这个生成命令的 prompt 就是直接复制 iterm2 默认的 prompt 。
|
15
adrianzhang 211 天前
哇!这个很棒呀!
如果能实现完全自然语言操作就完美了。例如: 我的本机 IP 地址,答案:10.10.8.790 。 修改本机 IP 为 10.10.8.780 答案:好的,已经修改完成,现在的本机 IP 是 10.10.8.780 本机有几个网卡? 答案:一块网卡 把 DNS 修改为 10.10.0.1 答案:修改完成 类似这样。。高抽象具体操作。 有空我也参与吧。希望你这个项目能坚持下去。 |