2008-01
09

感谢fcicq,他的new 30 days系列为我们带来了不少好文章。

今天想分析的是这篇Bash Pitfalls, 介绍了一些bash编程中的经典错误。fcicq说可能不适合初学者,而我认为, 正是bash编程的初学者才应该好好阅读一下这篇文章。

下面就逐个分析一下这篇文章中提到的错误。不是完全的翻译,有些没用的话就略过了, 有些地方则加了些注释。

阅读全文 »

2007-03
27

忙了一天做幻灯片,累死了。看来就算是自己熟悉的东西,想要给别人讲明白也不是件容易的事儿。 好在工作中发现了一个有用的命令:fc,使得今天总算有点乐趣。fc是bash的一个内部命令, 作用是修改命令历史中的命令。man bash然后搜索fc即可看到用法。

顺便总结一下bash命令行历史的用法:

history
命令查看以前用过的命令行列表。
!123
执行命令历史中编号为123的命令。
!cat
执行最后一条以cat开头的命令。
!!
执行上一条命令。
fc
打开编辑器(vim)编辑上一条命令。
fc 123
编辑命令历史中编号为123的命令。
fc 123 130
编辑命令历史中123-130的八条命令,退出后依次执行
fc ls
编辑最后一条以ls开头的命令。
fc -s ls=cat ls
将最后一条以ls开头的命令中的ls替换成cat,然后执行


2006-09
21

默认情况下,在bash中按 TAB 可以自动补齐,但仅能自动补齐命令名和文件名。bash-2.05及以后的版本提供了自动补齐的编程接口,通过安装 bash-completion 来使用 TAB 键自动补齐几乎任何内容,包括参数、文件、目录甚至包名称等等。例如:(<TAB>表示按TAB键)

$ rpm -<TAB>    (自动补齐参数)
-F  -U  -V  -b  -e  -i  -q  -t
$ man cat<TAB>    (自动补齐manpage)
cat       catan     catanf    catanh    catanhf   catanhl   catanl    catch     catclose  catdic    catgets   catopen
$ tar xjvf <TAB>   (补齐时仅显示tar.bz2文件)
gimp-2.2.13.tar.bz2  glib-2.12.3.tar.bz2

最近的发行版一般都自带bash-completion包,如果你的bash没有这个功能,可以从这里下载bash-completion包并安装。安装方法很简单,下载到的包中包含一个 bas-completion 文件,将其放在 /etc 下,然后编辑 /etc/bashrc,在 if [ "$PS1" ]; then 的判断中加入以下内容:

if [ "$PS1" ]; then
  ...其他内容省略,加入以下内容
  # Run bash completion code
  if [ -r /etc/bash_completion ]; then
  # Source completion code.
    . /etc/bash_completion
  fi
fi