11.4 使用字符串再次运行以前运行过的命令

![string]

能够通过引用命令的历史编号来再次运行它,当然不错。但这需要事先知道命令在history中的编号,而查找这个编号多少有点麻烦(虽然把history的输出通过管道传递给grep命令可能会有帮助,但仍然不是最好的办法)。为了引用以前输入的命令,通常更好的办法是按照命令的实际名称来引用。如果在感叹号后面输入某个命令的前几位字母,shell将运行它能够在.bash_history文件中找到的与之匹配的第一个命令。

  1. $ cat /home/scott/todo
  2. Buy milk
  3. Buy dog food
  4. Renew Linux Magazine subscription
  5. $ cd /home/scott/pictures
  6. $ !cat
  7. cat /home/scott/todo
  8. Buy milk
  9. Buy dog food
  10. Renew Linux Magazine subscription

如果在命令历史中找到3个cat命令的运行记录,即35(cat /home/scott/todo)、412(cat /etc/apt/sources.list)和496(cat /home/scott/todo),而此时输入!cat,就会运行编号为496的那条命令。如果要运行编号为412的命令,要么直接运行!412,要么在感叹号后面提供足够多的信息,让命令可以判断出要引用的是编号为412的命令。

  1. $ !cat /etc
  2. cat /etc/apt/sources.list
  3. deb http://us.archive.ubuntu.com/ubuntu breezy main restricted
  4. deb-src http://us.archive.ubuntu.com/ubuntu breezy
  5. main restricted

因为人类记忆单词要比记忆数字容易得多,所以最终可能还是采用通过字符串的方法来调用以前运行过的命令。如果觉得不确定,可以运行history命令看一看。