天涯客063 2025-11-16 15:23 采纳率: 66.7%
浏览 5
已结题

manjaro系统运行sreenfetch报错

manjaro linux系统,运行screenfetch报错

/usr/bin/screenfetch: 行 1892: -: 算术语法错误:需要操作数(错误记号是 "-")

打开/usr/bin/screenfetch后,报错的那几行内容如下

mem=$(free -b | "${AWK}" -F ':' 'NR==2{print $2}' | "${AWK}" '{print $1"-"$6}')
        usedmem=$((mem / 1024 / 1024))
        totalmem=$((${mem//-*} / 1024 / 1024))
    fi
    mem="${usedmem}MiB / ${totalmem}MiB"

要如何修改?

  • 写回答

2条回答 默认 最新

  • 宝码香车 优质创作者: JavaScript技术领域 2025-11-16 19:50
    关注

    让【宝码香车】来帮您解答,本回答参考DeepSeek编写,并整理提供。

    如果答案能帮助您,请采纳,非常感谢!
    .
    每日一句正能量,让它带给您好心情:别让别人的评价,左右你的人生,你才是自己的主角。
    .

    根据您提供的错误信息和代码片段,问题出现在内存计算部分。错误是由于mem变量包含非数字字符("-")导致算术运算失败。

    问题分析

    在您提供的代码中:

    mem=$(free -b | "${AWK}" -F ':' 'NR==2{print $2}' | "${AWK}" '{print $1"-"$6}')
    

    这行代码将内存信息格式化为总内存-可用内存的字符串格式,但后续的算术运算无法处理这种格式。

    解决方案

    修改/usr/bin/screenfetch文件中的相关代码:

    # 找到原来的代码段
    mem=$(free -b | "${AWK}" -F ':' 'NR==2{print $2}' | "${AWK}" '{print $1"-"$6}')
    usedmem=$((mem / 1024 / 1024))
    totalmem=$((${mem//-*} / 1024 / 1024))
    
    
    # 替换为以下代码
    mem_info=$(free -b | "${AWK}" -F ':' 'NR==2{print $2}' | "${AWK}" '{print $1" "$6}')
    totalmem=$(echo "$mem_info" | "${AWK}" '{print $1}')
    availablemem=$(echo "$mem_info" | "${AWK}" '{print $2}')
    usedmem=$(( (totalmem - availablemem) / 1024 / 1024 ))
    totalmem=$(( totalmem / 1024 / 1024 ))
    

    或者更简洁的版本:

    # 替换原来的代码段
    mem_info=$(free -b | awk 'NR==2{print $2,$7}')
    totalmem=$(echo $mem_info | awk '{print $1}')
    availablemem=$(echo $mem_info | awk '{print $2}')
    usedmem=$(( (totalmem - availablemem) / 1024 / 1024 ))
    totalmem=$(( totalmem / 1024 / 1024 ))
    

    修改步骤

    1. 备份原文件:
    sudo cp /usr/bin/screenfetch /usr/bin/screenfetch.backup
    
    1. 使用文本编辑器修改文件:
    sudo vim /usr/bin/screenfetch
    
    1. 找到第1892行附近的代码段并进行替换
    1. 保存文件后测试:
    screenfetch
    

    替代方案

    如果上述修改仍有问题,可以考虑重新安装screenfetch:

    # 卸载当前版本
    sudo pacman -R screenfetch
    
    
    # 重新安装
    sudo pacman -S screenfetch
    

    或者使用neofetch作为替代工具:

    sudo pacman -S neofetch
    neofetch
    

    希望这个解决方案能帮助您解决问题!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月24日
  • 已采纳回答 11月16日
  • 创建了问题 11月16日