#!/bin/bash # 交互式命令行模式 interactive_mode() { # 设置终端为非规范模式,不需要按回车即可读取输入 old_tty=$(stty -g) stty raw -echo while true; do echo -en "\r请输入命令 (c: 清空日志, p: 打印日志, l: 查看日志, t: 实时查看日志, m: 复制错误信息, q: 退出): " cmd=$(dd bs=1 count=1 2>/dev/null) echo # 换行 case $cmd in c) > storage/logs/laravel.log echo "日志已清空。" ;; p) errors=$(cat storage/logs/laravel.log | grep "ERROR") if [ -n "$errors" ]; then echo cat storage/logs/laravel.log | grep "ERROR" echo else echo "未发现错误信息。" fi ;; l) # 恢复终端设置以便less命令正常工作 stty $old_tty less storage/logs/laravel.log # 重新设置非规范模式 stty raw -echo ;; t) # 恢复终端设置以便tail命令正常工作 stty $old_tty tail -f -n 1000 storage/logs/laravel.log # 重新设置非规范模式 stty raw -echo ;; q) # 恢复终端设置后退出 stty $old_tty echo "退出程序" exit 0 ;; m) if [ "$(uname)" == "Darwin" ]; then errors=$(cat storage/logs/laravel.log | grep "ERROR") if [ -n "$errors" ]; then cat storage/logs/laravel.log | grep -m1 "ERROR" | \ awk '{print $0,"\n\n","上面是错误日志,请帮我修复这个bug,并始终用中文语言回答。"}' | pbcopy echo "已复制错误信息到剪贴板,你可以问AI助手,Ta会给你解决错误。" else echo "未发现错误信息。" fi else errors=$(cat storage/logs/laravel.log | grep "ERROR") if [ -n "$errors" ]; then echo "正在复制错误信息到剪贴板..." cat storage/logs/laravel.log | grep -m1 "ERROR" | \ awk '{print $0,"\n\n","上面是错误日志,请帮我修复这个bug,并始终用中文语言回答。"}' | xclip -selection clipboard echo "已复制错误信息到剪贴板,你可以问AI助手,他会给你解决错误。" else echo "未发现错误信息。" fi fi ;; *) echo "无效命令。使用 'c' 清空日志, 'p' 打印日志, 'l' 查看日志, 't' 实时查看日志, 'm' 复制错误信息, 'q' 退出。" ;; esac done } interactive_mode