shell 歷史命令相關記錄

shell 歷史命令使用上有不少技巧,除了常常常常使用的mysql

fc -l
history
!!
shell> ls /bin/sh
shell> file !:$

!: 是對歷史命令參數的直接引用 。
再來看一個長點的。linux

shell> tar zxvf httpd-2.0.59.tar.bz2
這顯然是一個錯誤的輸入,你們都知道bz2是使用bzip解壓縮的,對應的tar參數,應當是使用」jxvf」. 那咱們能夠當即這樣修正它:web

shell> tar jxvf !:2
「!:2」會得到上面tar命令的第2個參數,做爲當前的輸入. 獲取的歷史輸入,並不僅是能夠單獨使用,也能夠做爲命令的一部分象這樣:sql

shell> tar zxvf httpd-2.0.59.tar.bz2
shell> tar jxvf !:2 -C /usr/tmo

執行完上面的獲取,命令被替換成了tar jxvf httpd-2.0.59.tar.bz2 -C /usr/tmo
那就會按照-C指定的路徑把包解壓縮到/usr/tmo中.
命令執行後的結果:
tar: /usr/tmo: Cannot chdir: No such file or directory
tar: Error is not recoverable: exiting now
sorry,我一不當心又敲錯了.我原本是想解壓縮到/usr/tmp中的這時候另外一個更有趣的命令派上用場了,shell

「^」號(替換)編程

shell> ^mo^mp

這會把上一個命令行裏的mo替換成mp
神奇吧,你的指法再快,只是在浪費時間,我輕敲6個字符,就搞定了上面的錯誤.bash

!是bash和cshell默認的歷史替換符號
!! 重複最後一個命令
!:s/xy/yx 這個命令會把最後一個命令裏的xy替換成yx
好比etho xy !:s/xy:/yxsvg

!so 重複最近以so開始的命令
!?fn? 重複最近喊有fn的命令,在某個參數中或某個命令的名稱中均可以使用
!32 執行號碼爲32的命令
!! & 會在最後一個命令的末尾加上& (能夠加上任意內容)
!:0 挑選出命令的名稱,而不是整行
!:3 第3個參數
!:2-4 第2到4個參數
!:-3 從第0個到第三個參數
!^ 第一個參數
!$ 最後一個參數
!* 第一個到最後一個參數
!:2* 第2個到最後一個
!:2- 從第2個開始,但不要結尾參數
!?fn?% 給出第一個包含 fn的次(sort fn1 fn2 fn3 … =>echo !?fn?% =>echo fn1)ui

還有一個會用到,$ !!:p
這個命令可將最後一條命令顯示出來並更改歷史記錄,能夠這樣更有用 $ !788:p 顯示第788條記錄,並寫到最近歷史命令中去。atom

更cool的,請參
man 3 history
和其餘的一些man page

命令行編程 shell是直接支持命令行編程的. 好比:

sh > /usr/local/src
sh > ls *z


ZendOptimizer-3.0.0-linux-glibc21-i386.tar.gz mod_fastcgi-2.4.2.tar.gz
dia-0.94.tar.gz mod_fcgid.1.10.tar.gz
gd-2.0.33.tar.gz mysql-4.0.27.tar.gz
jpegsrc.v6b.tar.gz mysql-standard-4.0.26-pc-linux-gnu-i686-glibc23.tar.gz
lighttpd-1.4.11.tar.gz


開工了,我要把這些東西裝起來,解壓縮吧,好多呀,要敲n個命令.

別急,這不會花費你幾秒鐘的時間;

sh > for i in `ls *z`
sh > do
sh > tar zxvf $i
sh > done

眼暈了吧,不一會全部的包都解壓縮了。