我們在執行shell命令時,往往需要使用之前命令的引數。在引數比較簡單時,通過重複輸入就能滿足需要。在引數比較長或者引數個數比較多時,如果可以重用歷史命令中的引數就能達到事半功倍的效果。本文將討論三種獲取歷史命令中引數的方法。
1、通過readline快捷鍵實現
readline是乙個強大的庫,用於實現方便的命令列編輯功能,bash、ftp、python、zsh、mysql等程式的命令列介面都是使用readline實現的。事實上,我們經常使用的ctrl-r(查詢歷史命令)、ctrl-p(上一歷史命令)、ctrl-a(跳到行首)等快捷鍵並不是bash實現的,其幕後功臣正是readline。
通過輸入alt-dot(alt鍵+.鍵)、esc-dot(esc鍵+.鍵)、meta-dot能夠得到上一命令的最後乙個引數。雖然通過readline可以得到上一命令的其他引數,但這些快捷鍵往往與遠端登入工具有衝突,需要單獨設定term型別,因此本文不做介紹,關於這些快捷鍵可以參考readline shortcuts和這裡。
2、通過$_實現
$_會進入到歷史命令之中,即執行history命令能看到之前輸入的$_,這根稍後介紹的bash歷史展開有顯著的不同。
順便說一下,在python shell中_也有意義,表示上乙個表示式的結果。
3、通過bash歷史展開(history expand)實現
使用bash歷史展開時用,!$獲取上一命令的最後乙個引數。bash歷史展開由命令、引數、操作符三部分構成,分別表示展開哪一條命令、該命令的哪個引數、對命令的操作。命令展開完成之後才會進入.bash_history中,即執行history命令不會看到用於歷史展開的引數。
本節的所有命令都假設當前bash已經有如下的歷史:
2 2012-09-21 20:55:08 ls 6 7 8 9 10
3 2012-09-21 20:55:15 echo 11 12 13 14 15
4 2012-09-21 20:55:22 cat 16 17 18 19 20
5 2012-09-21 20:55:27 echo 21 22 23 24 25
1) 命令部分在bash中叫做event designators,一般用!開始乙個歷史展開。
2)引數部分(word designators),用於從命令中選取指定的引數,:用於分割命令部分與引數部分。
通過bash歷史展開實現建立並cd到目錄的方式為:
其中!#表示"mkdir dir && cd」,取第乙個引數就得到了目錄名。
3)操作符(modifiers),在可選的引數部分之後,可以指定乙個或多個用:開始的操作符
[1]
[2]
Bash的歷史命令
一 歷史命令 1 語法 history 選項 歷史命令儲存檔案 選項 c 清空歷史命令 w 把快取中的歷史命令寫入歷史命令儲存檔案 bash histoty 歷史命令預設儲存1000條,可以在環境變數配置檔案 etc profile中進行修改。2 歷史命令呼叫方式 3 命令與檔案補全 在bash中,...
Bash和Ksh中查詢和執行歷史命令
在linux的bash環境中,可以比較方便的搜尋和執行最近輸入過的命令,其實,在unix的ksh環境中,也可以做到,不過方法有所不同。總結這兩種shell環境下相關的歷史命令操作如下 bash history 顯示歷史命令 history 10 顯示最近的10條歷史命令 顯示並執行上一條歷史命令 2...
Bash和Ksh中查詢和執行歷史命令
bash history 顯示歷史命令 history 10 顯示最近的10條歷史命令 顯示並執行上一條歷史命令 27 顯示並執行第27條歷史命令 2 顯示並執行倒數第2條歷史命令 ps 顯示並執行上一條以ps開頭的命令 ps p 顯示上一條以ps開頭的命令 pass 顯示並執行上一條包含pass的...