溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Bash中的history命令怎么用

發(fā)布時(shí)間:2021-10-25 15:18:04 來(lái)源:億速云 閱讀:232 作者:小新 欄目:系統(tǒng)運(yùn)維

小編給大家分享一下Bash中的history命令怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

history 是內(nèi)置的命令

history 命令與許多其他的命令不同。你可能習(xí)慣于命令都作為可執(zhí)行文件放置在常見(jiàn)的系統(tǒng)級(jí)的位置,例如 /usr/bin,/usr/local/bin  或 ?/ bin。但是,內(nèi)置的 history 命令并不在你的環(huán)境變量 PATH 保存的路徑中的。

實(shí)際上,history 命令并沒(méi)有保存在物理位置中:

$ which history  which: no history in [PATH]

history 其實(shí)是 Shell 本身的一個(gè)內(nèi)置函數(shù):

$ type history history is a shell builtin $ help history history: history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]  Display or manipulate the history list. [...]

由于 history 是 Shell 的內(nèi)置函數(shù),所以每種 Shell 的 history 函數(shù)都是獨(dú)一無(wú)二的。因此,你在 Bash  中能使用的功能可能無(wú)法在 Tcsh,F(xiàn)ish 或 Dash 中使用,同樣的,在 Tcsh,F(xiàn)ish 或 Dash 中能使用的功能也可能無(wú)法在 Bash  中使用。

查看你的 Bash 命令歷史記錄

history 命令最基本,最頻繁的用法就是查看你的 Shell 會(huì)話(huà)的命令歷史記錄:

$ echo "hello" hello $ echo "world" world $ history   1  echo "hello"   2  echo "world"   3  history

事件提示符

事件提示符 (!) 是按事件搜索歷史記錄的。這里的事件,指的是每一條記錄在歷史記錄里的命令。換句話(huà)說(shuō),它就是一行命令,并被數(shù)字索引標(biāo)記著以供引用。

要重新運(yùn)行歷史記錄中的一個(gè)命令,用 ! 直接加上 (無(wú)空格) 你想要運(yùn)行的命令前面的索引數(shù)字即可。例如,假設(shè)歷史記錄中的第一條指令是 echo hello  ,然后你想重新運(yùn)行它:

$ !1 echo "hello" hello

你還可以通過(guò)從歷史記錄中的當(dāng)前位置開(kāi)始提供負(fù)數(shù)的行來(lái)使用相對(duì)定位。例如,返回歷史記錄中倒數(shù)第3條命令:

$ echo "alvin" alvin $ echo "hello" hello $ echo "world" world $ !-3 echo "alvin" alvin

如果你只想返回上一條命令,你可以使用簡(jiǎn)寫(xiě) !! 來(lái)替代 !-1。這整整節(jié)省了一次按鍵的時(shí)間!!!

$ echo "alvin" alvin $ !! echo "alvin" alvin

字符串搜索

你也可以通過(guò)特定的字符串來(lái)搜索歷史記錄中的命令并運(yùn)行它。

若是想要搜索以特定字符串開(kāi)頭的命令,就用 ! 直接加上 (無(wú)空格) 你想要搜索的字符串:

$ echo "alvin" alvin $ true $ false $ !echo echo "alvin" alvin

你還可以搜索在任意位置包含特定字符串的命令。要做到這點(diǎn),你只需要用 ! 直接加上前后兩端都被 ? 包圍的特定字符串即可,像這樣:

$ echo "alvin" alvin $ true $ false $ !?alvin? echo "alvin" alvin

如果你知道你想要搜索的字符串在命令的最后面,那就可以省略字符串后面的 ?,像這樣:

$ echo alvin alvin $ !?alvin echo alvin alvin

值得注意的是,若是歷史記錄中包含目標(biāo)字符串的命令不止一條,則它只會(huì)執(zhí)行符合條件的命令中最后的一條:

$ echo "hello world" hello world $ echo "hello alvin" hello alvin $ !?hello? echo "hello alvin" hello alvin

字符串替換

你可以搜索一個(gè)特定的字符串并用新字符串替換它,從而更改命令:

$ echo "hello" hello $ echo "world" world $ ^hello^alvin echo "alvin" alvin

但是它只能替換第一次出現(xiàn)的目標(biāo)字符串,若是命令中出現(xiàn)兩次目標(biāo)字符串,則只有第一次出現(xiàn)的會(huì)被替換,像這樣:

$ echo "hello hello" hello hello $ ^hello^alvin echo "alvin hello" alvin hello

與字符串搜索一樣,當(dāng)歷史記錄中包含目標(biāo)字符串的命令不止一條時(shí),只替換并執(zhí)行最后一條:

$ echo "hello world" hello world $ echo "hello" hello $ ^hello^alvin echo "alvin" alvin

充分利用 history 命令

實(shí)際上,Bash 的 history 命令的功能遠(yuǎn)不止本文所提到的,但這是你習(xí)慣使用 history 命令的一個(gè)很好的開(kāi)始,而不僅僅是利用 history  來(lái)查看歷史記錄。要經(jīng)常使用 history 命令,看看你只利用 history 命令而不輸入具體的指令能完成多少事情,你會(huì)被驚艷到的。

以上是“Bash中的history命令怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI