mylog 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #!/bin/bash
  2. # 交互式命令行模式
  3. interactive_mode() {
  4. # 设置终端为非规范模式,不需要按回车即可读取输入
  5. old_tty=$(stty -g)
  6. stty raw -echo
  7. while true; do
  8. echo -en "\r请输入命令 (c: 清空日志, p: 打印日志, l: 查看日志, t: 实时查看日志, m: 复制错误信息, q: 退出): "
  9. cmd=$(dd bs=1 count=1 2>/dev/null)
  10. echo # 换行
  11. case $cmd in
  12. c)
  13. > storage/logs/laravel.log
  14. echo "日志已清空。"
  15. ;;
  16. p)
  17. errors=$(cat storage/logs/laravel.log | grep "ERROR")
  18. if [ -n "$errors" ]; then
  19. echo
  20. cat storage/logs/laravel.log | grep "ERROR"
  21. echo
  22. else
  23. echo "未发现错误信息。"
  24. fi
  25. ;;
  26. l)
  27. # 恢复终端设置以便less命令正常工作
  28. stty $old_tty
  29. less storage/logs/laravel.log
  30. # 重新设置非规范模式
  31. stty raw -echo
  32. ;;
  33. t)
  34. # 恢复终端设置以便tail命令正常工作
  35. stty $old_tty
  36. tail -f -n 1000 storage/logs/laravel.log
  37. # 重新设置非规范模式
  38. stty raw -echo
  39. ;;
  40. q)
  41. # 恢复终端设置后退出
  42. stty $old_tty
  43. echo "退出程序"
  44. exit 0
  45. ;;
  46. m)
  47. if [ "$(uname)" == "Darwin" ]; then
  48. errors=$(cat storage/logs/laravel.log | grep "ERROR")
  49. if [ -n "$errors" ]; then
  50. cat storage/logs/laravel.log | grep -m1 "ERROR" | \
  51. awk '{print $0,"\n\n","上面是错误日志,请帮我修复这个bug,并始终用中文语言回答。"}' | pbcopy
  52. echo "已复制错误信息到剪贴板,你可以问AI助手,Ta会给你解决错误。"
  53. else
  54. echo "未发现错误信息。"
  55. fi
  56. else
  57. errors=$(cat storage/logs/laravel.log | grep "ERROR")
  58. if [ -n "$errors" ]; then
  59. echo "正在复制错误信息到剪贴板..."
  60. cat storage/logs/laravel.log | grep -m1 "ERROR" | \
  61. awk '{print $0,"\n\n","上面是错误日志,请帮我修复这个bug,并始终用中文语言回答。"}' | xclip -selection clipboard
  62. echo "已复制错误信息到剪贴板,你可以问AI助手,他会给你解决错误。"
  63. else
  64. echo "未发现错误信息。"
  65. fi
  66. fi
  67. ;;
  68. *)
  69. echo "无效命令。使用 'c' 清空日志, 'p' 打印日志, 'l' 查看日志, 't' 实时查看日志, 'm' 复制错误信息, 'q' 退出。"
  70. ;;
  71. esac
  72. done
  73. }
  74. interactive_mode