GeekTool介绍及Shell模式应用二则(以及df、cal、date、sed的使用)

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的Shell模式,我们可以把 任何命令的执行结果 周期性的显示在屏幕的任何地方。

打开GeekTool,在Geeklets列表中拖动Shell图标到屏幕指定的位置,这时我们看到一个空白的Shell框,只具备关闭按钮和大小调节柄:

GeekTool介绍及Shell模式应用二则(以及df、cal、date、sed的使用)_第1张图片

同时出现的还有黑色的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%
最后,选择大一点的字体和白色的前景色,就能很好的和蓝色的桌面背景搭配了。
至于刷新,可以把Refresh every [ ]s设置成120,也就是两分钟检查一次。Timeout可以随便填,除非是挂载了网络盘,否则这个脚本几乎是瞬间返回的,不需要考虑超时情况。


二. 显示当前日历

原本看日历的方式是四个手指一划,转到桌面小工具的那个页面去看日历控件。后来觉得没啥实用的桌面小工具,干脆就整个把页面给关闭了。这下看日期成了问题,总不能老是去打开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
刷新时间随便好了,这个命令没啥成本的。

GeekTool介绍及Shell模式应用二则(以及df、cal、date、sed的使用)_第2张图片

你可能感兴趣的:(Mac,Linux,应用,Mac,Shell,Ksh,sed)