净化百度,从我做起

最近 “魏则西” 事件,让百度大大的爽了一把。先不去评论百度这个锅到底背的对不对,但是能让这么多人迎头痛批,拍手叫好,可以想象百度到底做了多少恶。身处这样一个奇葩的国度,完全改变现状,弃用百度是不现实的。那么我们怎么不让百度那些恶心的推广链接影响到我们呢?从程序员的角度来看,我们无法改写百度服务器端的行为,但是我们可以改变自己的客户端,拒绝做小白羊。

阅读全文

BASH 中的空格

对于大部分 BASH 初学者而言,在动手写脚本时,遇到最频繁的错误,我想,大概就是这样:

1
2
3
4
5
#!/bin/bash

msg = "hello world" # msg: command not found

echo "My message: $msg"

在刚接触 BASH 时,我也在这个地方纠结了很久,为什么 = 前后不能有空格?但 google 了半天,几乎所有的人都只是说,这种写法是 BASH 固有的语法,而没有更深一层去追究这个问题。这里,这篇文章尝试从 BASH 的词法设计上去追寻这个问题的本质。

阅读全文

终端中的动画

在印象中,好像终端就是黑白界面,加扁平输出。是不是很乏味?其实现在 Linux/Unix 系统中带的终端模拟器是支持动画和彩色输出的。下面,一起来看看字符界面下的动画魅力!

定点输出

回车符(carriage return)

在这之前,我一直下意识的以为回车符和换行符是一个意思,相信有很多人也有这种错误的理解。其实不然,回车符(\r)是把光标返回到行首,而换行符(\n)才是把光标移到下一行。尽管在 Linux 中,是采用换行符作为新行的标识,但终端模拟器中还是会响应回车符 [1]。

OK,在理解了回车符和换行符的区别后,我们考虑一种情况:当在一行结束的时候,只输出回车符,而没有换行符,会发生什么?由于没有换行,只回到了行首,所以新打印的内容会把当前行覆盖。而我们可以基于这个特性,在脚本中做一些很有意思的动画。这里我写了一个例子,可以尝试一下:

阅读全文

BASH 的目录切换

在 BASH 中你用的最多的命令是什么?这绝对非 cd 莫属(ls 也是个潜力股,暂时做老二吧)。所以在这篇文章中,我们聊聊如何高效的在 BASH 中切换目录。

往后切换目录

回退目录,正规的做法是 cd ..。但网上的小伙伴很有才,发明了更简洁实用的命令。这里把它搬过来,其实我自己也一直这么用的:

1
2
3
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'

甚至可以定义5点的别名,但感觉用到的几率不大。有了这些别名,就可以愉快的用 N 个点来回退 N 级目录。

其实在进行目录切换时,BASH 默认会把上一个目录记录在 OLDPWD。可以用 cd -,或者 cd $OLDPWD 来在两个目录之间来回切换。这在两个不同的目录树下,很有作用。

阅读全文

BASH 的调试手段

平时在写 BASH 脚本时,总是会碰到让人抓狂的 BUG。和 C/C++ 这么丰富的调试工具相比,BASH 又有什么调试手段呢?

echo/print (普通技)

打印一些变量,或者提示信息。这应该是一个通用的方法了。在 BASH 里,我们可以简单的用 echo,或者 print 来输出一些 log,或者加一些 loglevel 来过滤一些 log。这里贴一下我平常用的函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
_loglevel=2

DIE() {
echo "Critical: $1" >&2
exit 1
}

INFO() {
[ $_loglevel -ge 2 ] && echo "INFO: $1" >&2
}

ERROR() {
[ $_loglevel -ge 1 ] && echo "ERROR: $1" >&2
}

阅读全文