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框,只具备关闭按钮和大小调节柄:

同时出现的还有黑色的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
日 一 二 三 四 五 六12  3  4  5  6  7  89 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的使用)相关推荐

  1. 20200928 003.开发环境介绍_交互模式的使用_IDLE介绍和使用

    Python 开发环境 开发环境,英文是 IDE( Integrated Development Environment 集成开发环境 ). 不要纠结于使用哪个开发环境.开发环境本质上就是对 Pyth ...

  2. [python] shell模式下面写for循环

    很多时候,我们需要使用shell模式进行一步一步的参考别人的程序,如果是有pycharm,还比较方便,但是假如只有linux平台,那么对于这种交互式的shell,又如何写for循环然后进行调试呢? 网 ...

  3. Spark之Spark角色介绍及运行模式

    Spark之Spark角色介绍及运行模式 集群角色 运行模式 1. 集群模式 从物理部署层面上来看,Spark主要分为两种类型的节点,Master节点和Worker节点: Master节点主要运行集群 ...

  4. shell编程入门 linux解释器原理,Shell编程入门Linux解释器原理详细介绍 使用Shell进行工作的人们对.doc...

    Shell编程入门Linux解释器原理详细介绍 使用Shell进行工作的人们对 Shell编程入门:Linux解释器原理详细介绍使用Shell进行工作的人们对Unix/Linux下的Shell编程都很 ...

  5. 详细介绍Linux shell脚本系列基础学习(列表)

    本系列适合Linux初学者,属于Linux入门级教程,主要介绍了Shell的分类.语法格式以及脚本的使用和编写格式等. 不断更新中,是Shell学习的必读经典教程.现主要包含以下文章: Linux S ...

  6. Midjourney|文心一格prompt教程[基础篇]:注册使用教程、风格设置、参数介绍、隐私模式等

    Midjourney|文心一格prompt教程[基础篇]:注册使用教程.风格设置.参数介绍.隐私模式等 开头讲一下为什么选择Midjourney和文心一格,首先Midjourney功能效果好不多阐述: ...

  7. 最全介绍的代理模式---第一节-静态代理

    一.什么是代理? 其实生活中有很多例子: (1)一件产品,生产出来后,需要代理商来销售它,我们作为客户,会通过代理商来买产品,代理商就是我们的代理对象,产品为被代理对象(目标对象) (2)租房子(中介 ...

  8. shell中的文本处理(grep、sed、awk命令)

    grep 文本过滤命令 sed 行编辑器 awk 报告生成器 一. grep文本过滤命令 全面搜索研究正则表达式并显示出来grep命令是一种强大的文本搜索工具,根据用户指定的"模式" ...

  9. shell基础---shell中的时间值提取(date)

    shell中的时间值提取(date) 方法1 # date +%F # date +%T # cat time.sh #!/bin/bashDATE=`date +%F | sed 's/-//g'` ...

  10. shell中的时间值提取(date)

    shell中的时间值提取(date) 方法1 # date +%F # date +%T # cat time.sh #!/bin/bashDATE=`date +%F | sed 's/-//g'` ...

最新文章

  1. 工业机器视觉系统相机如何选型?(理论篇—3)
  2. 接口 500_Yamaha Sonogenic SHS-500肩背键盘 全方位测评
  3. 院士张钹:AI奇迹短期难再现 深度学习技术潜力已近天花板
  4. 我的7天=玩2天+窝5天
  5. 尝鲜Ubuntu Server 12.04 LTS
  6. word2vec模型的理解
  7. 对于根号18 利用计算机,一八年级数学题
  8. IP地址,子网掩码,默认网关,路由,形象生动阐述
  9. mysql 小雨_Mysql数据库
  10. HDU 1301 - Jungle Roads( Prim求最小生成树 )
  11. php 持久化对象,php-对类持久化的引用
  12. python相对路径-Python中的绝对路劲和相对路径
  13. 如何取消计算机的自动更新,电脑自动更新如何取消 电脑自动更新取消方法
  14. C语言数据结构-顺序表的插入与删除(图文详解)
  15. CSDN账号绑定github(极简办法)
  16. 用html写游戏,Html5写一个简单的俄罗斯方块小游戏
  17. android 释放摄像头,android – 为什么Camera需要在onPause()而不是onstop()方法中释放?...
  18. [BZOJ4199][NOI2015]品酒大会-后缀数组
  19. MM定理(Modigliani-Miller)证明与图解
  20. Flutter中的依赖注入——get_it

热门文章

  1. Spring AOP动态代理的两种实现方式
  2. H264---H.264/AVC 的各大主流编解码器JM、x264、Xvid、T264、ffmpeg、ffdshow + JMHM源码分析
  3. 计算机无法启动无法修复工具栏,excel打不开怎么办?使用excel修复工具教程
  4. PCB生产工艺流程博大精深
  5. 【计算机网络实验】使用Packet Tracer搭建网络拓扑
  6. 使用SHFileOperation复制网络(局域网)共享文件夹及子文件
  7. 和我一起打造个简单搜索之Logstash实时同步建立索引
  8. 【转】Ubuntu下用G++编译C++程序
  9. [转]100个经典C语言程序(益智类问题)
  10. vue项目中使用百度离线地图