首頁 > 軟體

在Linux命令列下令人驚嘆的驚嘆號(!)

2020-06-16 17:58:55

'!'符號在Linux中不但可以用作否定符號,還可以用來從歷史命令記錄中取出命令或不加修改的執行之前執行的命令。下面的所有命令都已經在Bash Shell中經過確切地檢驗。儘管我沒有試過,但大多都不能在別的Shell中執行。這裡我們介紹下Linux命令列中符號'!'那驚人和奇妙的用法。

1. 使用數位從歷史命令列表中找一條命令來執行

您也許沒有意識到您可以從歷史命令列表(之前已經執行的命令集)中找出一條來執行。首先,通過"history"命令查詢之前命令的序號。

  1. $ history

使用history命令找到最後執行的命令

現在,只需要使用歷史命令輸出中顯示在該命令前面的數位便可以執行這個命令。例如,執行一個在history輸出中編號是1551的命令。

  1. $ !1551

使用命令ID來執行最後執行的命令

這樣,編號為1551的命令(上面的例子是top命令)便執行了。這種通過ID號來執行之前的命令的方式很有用,尤其是在這些命令都很長的情況下。您只需要使用![history命令輸出的序號]便可以呼叫它。

2. 執行之前的倒數第二個、第七個命令等

您可以以另一種方式來執行之前執行的命令,通過使用-1代表最後的命令,-2代表倒數第二個命令,-7代表倒數第七個命令等。

首先使用history命令來獲得執行過的命令的列表。history命令的執行很有必要,因為您可以通過它來確保沒有rm command > file或其他會導致危險的命令。接下來執行倒數第六個、第八個、第十個命令。

  1. $ history
  2. $ !-6
  3. $ !-8
  4. $ !-10

通過負數序號執行之前執行的命令

3. 傳遞最後執行的命令的引數,以方便的執行新的命令

我需要顯示/home/$USER/Binary/firefox資料夾的內容,因此我執行:

  1. $ ls /home/$USER/Binary/firefox

接下來,我意識到我應該執行'ls -l'來檢視哪個檔案是可執行檔案。因此我應該重新輸入整個命令麼?不,我不需要。我僅需要在新的命令中帶上最後的引數,類似:

  1. $ ls -l !$

這裡!$將把最後執行的命令的引數傳遞到這個新的命令中。

將上一個命令的引數傳遞給新命令

4. 如何使用!來處理兩個或更多的引數

比如說我在桌面建立了一個文字檔案file1.txt。

  1. $ touch /home/avi/Desktop/1.txt

然後在cp命令中使用絕對路徑將它拷貝到/home/avi/Downloads

  1. $ cp /home/avi/Desktop/1.txt/home/avi/downloads

這裡,我們給cp命令傳遞了兩個引數。第一個是/home/avi/Desktop/1.txt,第二個是/home/avi/Downloads。讓我們分別處理他們,使用echo [引數]來列印兩個不同的引數。

  1. $ echo "1st Argument is : !^"
  2. $ echo "2nd Argument is : !cp:2"

注意第一個引數可以使用"!^"進行列印,其餘的命令可以通過"![命令名]:[引數編號]"列印。

在上面的例子中,第一個命令是cp,第二個引數也需要被列印。因此是"!cp:2",如果任何命令比如xyz執行時有5個引數,而您需要獲得第四個引數,您可以使用"!xyz:4"。所有的引數都可以通過"!*"來獲得。

處理兩個或更多的引數 

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


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