GeekToolで僕なりの「Usage Monitor」を出してみた.
随分と間が空いてしまいました. ここ最近は就職活動とか大学院の発表会とかで忙しかったです.(言い訳)
今日は趣向を変えて私のmacのデスクトップ彩るGeekToolを紹介したいと思います.(多分みなさんご存知) といっても言うほど彩っていません.デザインセンスに溢れる見本はたくさん公開されています.そちらを参考にしてください.
GeekToolはシェルスクリプトの結果を出力することが出来ます.今回は CPU,Memory & Disk Usage MeterのコードをMavericksに対応させるということと,スクリプトの処理自体を軽くするということをやってみたのでそれを紹介したいと思います. ちなみに僕はシェルスクリプトはからっきしなので,もっといい方法があるかもしれません.今回のことをきっかけに触れてみた感じです.
いきなりですが,Mavericksへの対応はこちらの記事を参考にさせていただきました.不具合の原因についても書かれてあります.感謝です.終了! (※コードはまとめて下記に載せます.)
スクリプトの処理についてなのですが,素のCPU,Memory & Disk Usage Meterのコードだと,topコマンドを4回叩いてるんです... ターミナルが扱える方はtopをやってみると分かると思いますが,かなり重いんですよね.個別に毎回叩く意味はなさそうなので,topコマンドを叩く回数を1回にしたいと思います.
まぁ,あとは僕の好みで「※」を「■」に,メーターを5%刻みにすることを行ったコードが以下になります.
#!/bin/sh myData=`top -l 1` typeset -i cnt=0 echo "CPU\c" myCPU=`echo "$myData" |awk '/CPU usage/ {print $3}' |sed s/%//` myCPU=`echo "tmp=$myCPU; tmp /= 1; tmp" |bc` while [ $cnt -lt $myCPU ] do echo "\033[1;32m■\033[0m\c" cnt=`expr $cnt + 5` done while [ $cnt -lt 99 ] do echo "\033[0;37m■\033[0m\c" cnt=`expr $cnt + 5` done printf %4d $myCPU && echo "%\c" echo "\r" unset myCPU cnt=0 echo "Memory \c" myUsedMem=`echo "$myData" |awk '/PhysMem/ {print $2}' |sed s/M// ` myFreeMem=`echo "$myData" |awk '/PhysMem/ {print $6}' |sed s/M// ` myActiveMem=`echo "$myData" |grep "PhysMem" |sed -e "s/(//g" |awk '{print $4}' |sed s/M// ` myTotalMem=`expr $myUsedMem + $myFreeMem` myUsedPer=`echo |awk '{print u / t * 100}' u=$myUsedMem t=$myTotalMem` myUsedPer=`echo "tmp=$myUsedPer; tmp /= 1; tmp" |bc` myActUsedPer=`echo |awk '{print u / t * 100}' u=$myActiveMem t=$myTotalMem` myActUsedPer=`echo "tmp=$myActUsedPer; tmp /= 1; tmp" |bc` while [ $cnt -lt $myUsedPer ] do if [ $cnt -lt $myActUsedPer ]; then echo "\033[1;32m■\033[0m\c" else echo "\033[0;36m■\033[0m\c" fi cnt=`expr $cnt + 5` done while [ $cnt -lt 99 ] do echo "\033[0;37m■\033[0m\c" cnt=`expr $cnt + 5` done printf %4d $myActUsedPer && echo "%\c" echo "\r" unset myData unset myUsedMem unset myFreeMem unset myActiveMem unset myTotalMem unset myUsedPer unset myActUsedPer cnt=0 echo "Disk \c" myDisk=`df |awk '/dev\/disk0s2/ && NF>1 {print $5}' |sed 's/\%//'` myDisk=`expr 100 - $myDisk ` while [ $cnt -lt $myDisk ] do echo "\033[1;32m■\033[0m\c" cnt=`expr $cnt + 5` done while [ $cnt -lt 99 ] do echo "\033[0;37m■\033[0m\c" cnt=`expr $cnt + 5` done printf %4d $myDisk && echo "%\c" echo "\r" unset myDisk unset cnt
そのままでもいいですが,自分好みに色と記号は変えてみるといいと思います.僕はシンプルが一番なのでこんな感じになっております.
(Process MonitorとNetwork Monitorはまた別のスクリプトで出しています.)
いろんなコードが公開されていて,勉強になります.普段やらないシェルスクリプトを触るきっかけになりました.













