感谢fcicq,他的new 30 days系列为我们带来了不少好文章。
今天想分析的是这篇Bash Pitfalls, 介绍了一些bash编程中的经典错误。fcicq说可能不适合初学者,而我认为, 正是bash编程的初学者才应该好好阅读一下这篇文章。
下面就逐个分析一下这篇文章中提到的错误。不是完全的翻译,有些没用的话就略过了, 有些地方则加了些注释。
阅读全文 »忙了一天做幻灯片,累死了。看来就算是自己熟悉的东西,想要给别人讲明白也不是件容易的事儿。 好在工作中发现了一个有用的命令: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,然后执行
默认情况下,在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
