screenfetch報錯 /usr/bin/screenfetch: 行 1851: -: 語法錯誤:需要操作數(錯誤記號是 "-") 的一種解決方法
在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))
浙公網安備 33010602011771號