screenfetch报错 /usr/bin/screenfetch: 行 1851: -: 语法错误:需要操作数(错误记号是 "-") 的一种解决方法

发布时间 2023-04-10 20:37:41作者: 二所

在debian12(testing)上运行screenfetch报错,如下所示:

~$ screenfetch
/usr/bin/screenfetch: 行 1851: -: 语法错误:需要操作数(错误记号是 "-")
         _,met$$$$$gg.           ×××××@deb-test
      ,g$$$$$$$$$$$$$$$P.        OS: Debian 12 bookworm
    ,g$$P""       """Y$$.".      Kernel: x86_64 Linux 6.1.0-7-amd64
   ,$$P'              `$$$.      Uptime: 17m
  ',$$P       ,ggs.     `$$b:    Packages: 2065
  `d$$'     ,$P"'   .    $$$     Shell: bash
   $$P      d$'     ,    $$P     Resolution: 1920x1200
   $$:      $$.   -    ,d$$'     DE: KDE 5.103.0 / Plasma 5.27.2
   $$\;      Y$b._   _,d$P'      WM: KWin
   Y$$.    `.`"Y$$$$P"'          GTK Theme: Breeze [GTK2/3]
   `$$b      "-.__               Icon Theme: breeze
    `Y$$                         Disk: 501G / 1.1T (48%)
     `Y$$.                       CPU: AMD Ryzen 9 5950X 16-Core @ 32x 3.4GHz
       `$$b.                     GPU: VMware SVGA II Adapter
         `Y$$b.                  RAM: -
            `"Y$b._             
                `""""           
                                

根据提示打开/usr/bin/screenfetch这个脚本,可以看到报错位置的上下文是这样的:

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

运行free -b命令,可见正常输出:

               total        used        free      shared  buff/cache   available
内存:   16781590528  3409371136 11827744768   169746432  2212745216 13372219392
交换:    1023406080           0  1023406080

但是运行 free -b | awk -F ':' 'NR==2{print $2}' 就无输出了。
抓耳挠腮的想了一下,才发现在中文的debian系统上,free -b命令所输出内容中的冒号是中文字符,而screenfetch脚本中匹配处理的是英文字符。
进行如下丑陋的打补丁后,报错问题解决:

# 		这是一个丑陋的补丁,用以解决中文系统下的符号识别问题
# 		mem=$(free -b | awk -F ':' 'NR==2{print $2}' | awk '{print $1"-"$6}')
		mem=$(free -b | awk -F ':' 'NR==2{print $2}' | awk '{print $1"-"$6}')
		usedmem=$((mem / 1024 / 1024))