GeekTool是Mac下的一个桌面应用,用于在桌面上显示指定的文件、图片或脚本运行结果。这里结合简单的ksh代码来实现两个简单应用
一. 显示剩余空间
全面采用固态硬盘的结果是价格的全面提升,为了荷包考虑,叔只买了128G的低配。虽然本着不装游戏不存视频的原则,但有些开发任务需要临时占用几十个G的空间,必须时时关注才不至于运行十几个小时后宣告不治,所以随时知道自己还有多少容量是非常关键的。
但如何才能知道呢?
作为一个深度Linux用户(好吧,事实上我在Linux下通常是要多少空间有多少空间,所以也不太关心剩余的问题……),我通常是打开终端,执行df:
Hiarcs-MBP:~ hiarcs$ df -m
Filesystem 1M-blocks Used Available Capacity iused ifree %iused Mounted on
/dev/disk0s2 114892 66939 47702 59% 17200516 12211852 58% /
devfs 0 0 0 100% 639 0 100% /dev
map -hosts 0 0 0 100% 0 0 100% /net
map auto_home 0 0 0 100% 0 0 100% /home
/dev/disk3s1 60912 16579 44332 28% 4244316 11349154 27% /Volumes/Data
打开GeekTool,在Geeklets列表中拖动Shell图标到屏幕指定的位置,这时我们看到一个空白的Shell框,只具备关闭按钮和大小调节柄:
同时出现的还有黑色的Properties窗口(没有出现的话单击空白Shell框),在其中的Command栏填入df -m,可以注意到,密密麻麻的输出立刻出现在Shell框内,革命已成功一半!接下来调整下显示内容和字体即可。
首先是内容,太多太杂,而我只关心主硬盘的剩余空间。其次,大概也没人关心到有几M剩下,用G做单位更合理些。所以,我们对原始的命令作小小的调整,新建一个diskfree.ksh
#!/bin/ksh
set -A array `df -g | grep /dev/disk`
echo Used: ${array[2]}G ' ' Avail: ${array[3]}G ' ' Capacity: ${array[4]}
这段代码还是比较白话的,首先把df的参数改成-g从而实现单位的转换,其次找出设备为/dev/disk开头的行转换为数组,最后选择自己感兴趣的三个元素以特定的格式打印出来。注意grep本身会把外接的存储卡之类同样为disk的设备显示出来,只不过我们只取了前一行的元素罢了。
把Command换成diskfree.ksh的绝对路径,现在显示如下:
Used: 67G Avail: 44G Capacity: 60%
最后,选择大一点的字体和白色的前景色,就能很好的和蓝色的桌面背景搭配了。
二. 显示当前日历
原本看日历的方式是四个手指一划,转到桌面小工具的那个页面去看日历控件。后来觉得没啥实用的桌面小工具,干脆就整个把页面给关闭了。这下看日期成了问题,总不能老是去打开Calendar程序吧。同样,解决方式是用GeekTool直接在桌面显示。这次的主角是cal命令,cal的基本输出如下:
Hiarcs-MBP:scripts_ksh hiarcs$ cal
六月 2013
日 一 二 三 四 五 六
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
问题来了,那么今天是哪天呢?
所以,需要修改原始输出,把当天的日期用括号标示出来。这里我们用到date命令来找到今天的日期:
Hiarcs-MBP:scripts_ksh hiarcs$ date +%d
03
注意,cal的日期里是不带0的,因此我们需要把date的结果去掉前置的0,然后把cal输出中符合当天日期的数字替换掉。新建cal.ksh:
#!/bin/ksh
d=`date +%d | sed -e 's/^0//'`
cal | sed -e 's/^/ /' -e 's/$/ /' -e "s/ $d /\[$d\]/"
这里使用一连串的sed替换来达到目的,这里为了避免错误替换(比如把所有3都替换成[3])首先进行了前置后后置空格的添加。
同样,简单调整格式后,大功告成。
Hiarcs-MBP:scripts_ksh hiarcs$ ./cal.ksh
六月 2013
日 一 二 三 四 五 六
1
2 [3] 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
刷新时间随便好了,这个命令没啥成本的。