ZT - 對話 UNIX: UNIX 高手的重大秘密(4)

saintsiro發表於2010-08-08
使用歷史記錄重寫 如果您經常在 shell 提示符中花費大量時間,儲存 shell 歷史記錄可以節約時間和輸入。但是如果歷史記錄不能被修改,就會導致一些麻煩:記錄重複的命令,且多個 shell 例項可能會干擾各自的歷史記錄。這兩個問題很容易解決,只需在您的 .bashrc 中新增兩行: export HISTCONTROL=ignoreboth shopt -s histappend 第一行將移除您的 shell 歷史記錄中連續的重複命令。如果您想移除所有零散的副本,可將 ignoreboth 更改為 erasedups。第二行在 shell 退出時將 shell 的歷史記錄附加到您的記錄檔案。預設情況下,Bash 記錄檔案命名為 ~/~/.bash_history (不錯,這是一個點檔案)。可以透過設定 HISTFILE(不錯,這是一個環境變數)來更改它的位置。如果您想將一個 shell 的最近 10,000 命令儲存在一個包含 100,000 條目的記錄檔案中,將 export HISTSIZE=10000 HISTFILESIZE=100000 新增到您的 shell 啟動檔案中。要檢視一個 shell 的歷史記錄,在任意提示處鍵入 history 即可。 如果不能呼叫,那麼儲存的命令歷史記錄就用處不大。而這正是 shell !(或 bang)運算子的作用所在: !! ("bang bang") 完整地重複最後一條命令。 !:0 是前一條命令的名稱。 !^ 是前一條命令的第一個引數。!:2、!:3 ... !$ 等命令是前一條命令的第二、第三......以及最後一個引數。 !* 是最後一條命令的所有引數,命令名除外。 !n 重複歷史中編號為 n 的命令。 !handle 重複以 handle 中的字元開始的最後一條命令。例如,!ca 將重複以字元 ca 開始的最後一條命令,如 cat README。 !?handle 重複包含 handle 中的字元組成的字串的最後一條命令。例如,!?READ 還會匹配 cat README。 ^original^substitution 使用 substitution 替換 original 的第一個 例項。例如,如果前一條命令是 cat README,,命令 ^README^license.txt 將生成一條新命令 cat license.txt。 !:gs/original/substitution 將使用 substitution 替換 original 的所有 例項(!:gs 表示 “全域性替換[global substitution]”)。 !-2 是倒數第二條命令,!-3 是倒數第三條命令,以此類推。 您甚至可以合併歷史表示式來生成 !-2:0 -R !^ !-3:2 這樣的 “魔湯”,該命令將擴充套件為倒數第二條命令的名稱,加上 -R,再加上前一條命令的第一個引數,以及倒數第三條命令的第二個引數。要使這樣的神秘命令更具可讀性,可以在鍵入時擴充套件歷史參考。在任意提示符鍵入命令 bind Space:magic-space ,或者將其新增到一個啟動檔案,從而將空格鍵繫結到函式 magic-space,該函式將擴充套件內聯歷史替換。[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16896827/viewspace-1036455/,如需轉載,請註明出處,否則將追究法律責任。

相關文章