首頁 > 軟體

Linux命令列下」!」的十個神奇用法

2020-06-16 18:00:02

Linux 系統中,“!” 符號或者操作符通常被用做邏輯否定的操作符,同時也通過一些調整和改動命令來從歷史記錄中找出你需要的命令列。下面演示的命令列在bash Shell中都已經明確檢查過可用了。不過我沒有在其他的 Shell 直譯器下測試過,不過我相信這些命令也不會在其他的直譯器下執行。那麼現在就讓我們學習一下 “!” 這神奇而獨特的用法吧!

1.從歷史記錄中使用命令號來執行命令

你也許從沒意識到過可以從命令列歷史記錄(之前執行過的命令)裡執行一條命令,首先輸入 “history” 命令得到命令的序號。 

這時你可以通過命令 history 的輸出中的命令序號來執行一條命令。

上面可以看到它執行了號碼為1551的 top 命令,這種執行方式對執行某些特別長的命令非常有用,你只要使用”!”符號加上命令的序號就能執行該命令啦。

2.執行指定的之前執行過的命令

你可以執行 !-1、!-2 或者 !-7 等命令來執行你記錄序列中的倒數第一條命令、倒數第二條命令已經倒數第七條等等。。。和上面的方式一樣,你需要先用 history 命令來列出命令列表。其實這個命令非常有用,你可以通過它來確定沒有執行過某些錯誤命令比如 “rm command >file” 或者別的危險指令。這裡給出了執行倒數第六個、第八個和第十個命令的效果。

3.向一條新命令傳遞舊命令的引數避免重複輸入

比如說我需要列出 ‘/home/$USER/Binary/firefox’ 這個目錄。

但是這個時候我又想用 “ls-l“檢視這個目錄下的具體資訊,那麼我需要重新輸入上面的命令嗎?當然不需要,你只要用下面這個命令:

“!$” 符號可以將上一條命令的引數傳遞給下一條命令引數:

4.如何用(!)處理兩個以上的引數?例如我在桌面上建立了一個 1.txt 檔案

然後使用CP命令把它複製到 ‘home/avi/Downloads’ 目錄

這樣我們就向CP命令傳遞了兩個引數。第一個是 ‘/home/avi/Desktop/1.txt’ ,第二個是’/home/avi/Downloads’,為了區分它們,我們 使用 echo 來列印每個引數。

可以注意到第一個引數可以使用 “!^” 來表示,剩下的引數就可以使用 “命令名:引數序號”這種方式來表示,比如 “!cp:2″。再舉個例子,如果你執行的某個命令為 “xyz”,命令 後面有5個引數而你想呼叫第四個引數,就可以使用 “!xyz:4″ 來呼叫它。當然,你可以使用 “!* “ 來表示所有引數。

5.通過關鍵詞來執行之前的命令

我們可以通過執行關鍵詞來執行之前的命令。可以按照下面的命令來理解:

上面是相同的ls命令對應了不同引數和資料夾。此外我們將每一個標準輸出都傳遞到了 ‘/dev/null’ 因為我們並不希望處理程式的標準輸出。現在我們可以呼叫命令的關鍵詞來實現它們。

當你使用 “ls” 關鍵詞來執行之前命令的時候,你一定會被標準輸出給驚訝到。

更多詳情見請繼續閱讀下一頁的精彩內容http://www.linuxidc.com/Linux/2015-05/117774p2.htm


IT145.com E-mail:sddin#qq.com