如何使用 shopt 自定義 Bash Shell

已發表: 2022-01-29
Linux 筆記本電腦上的終端提示符。
Fatmawati Achmad Zaenuri/Shutterstock

如果您使用shopt微調 Bash shell 的行為,您可以控制超過 50 種設置。 我們將向您展示如何按照您喜歡的方式定制您的 Linux 系統。

shopt 內置

內置的shopt是所有版本的 Bash shell 的一部分,因此無需安裝任何東西。 多年來, shopt中可用的選項數量穩步增加。 因此,您擁有的 Bash 版本越舊, shopt選項列表就越短。

如果您的機器上似乎沒有運行,請檢查 Bash 的man頁條目並驗證該選項在您的shopt版本中可用。

我們涵蓋了以下所有shopt選項。 我們還描述瞭如何使用它並分享一些示例。 從那裡,您可以查看 Bash 手冊頁或 GNU Bash 參考手冊,看看這些選項是否有用或有吸引力。

一些shopt選項默認啟用,並構成 Bash 默認行為的一部分。 您可以啟用shopt選項作為對 Bash 的短期更改。 然後,當您關閉 shell 時,它將恢復為默認行為。

廣告

但是,如果您希望每次啟動 Bash shell 時都可以使用修改後的行為,則可以使更改永久生效。

商店選項

有 53 個shopt選項。 如果您使用不帶任何選項的shopt命令,它會列出這些。 如果我們通過wc命令管道輸出,它將為我們計算行數、單詞數和字符數。 因為每個shopt選項都在自己的行上,所以行數就是選項數。

我們輸入以下內容:

 店鋪 | 廁所

要查看所有選項,我們可以通過column命令管道輸出以在列中顯示選項名稱,或者我們可以將其通過管道傳輸到less中。

我們輸入以下內容:

 店鋪 | 柱子

在 Linux 手冊中查找 shopt

討論shopt及其選項的部分位於 Linux 手冊的 Bash 部分。 Bash 部分的長度超過 6,000 行。 您可以通過大量滾動找到shopt的描述,或者您可以在手冊中搜索它。

為此,請在 Bash 部分打開手冊:

 男子重擊

廣告

在手冊中,按/開始搜索。 鍵入以下內容,然後按 Enter:

 assoc_expand_once 

shopt選項部分的開頭將出現在man窗口中。

相關:如何使用 Linux 的 man 命令:隱藏的秘密和基礎

設置和取消設置選項

要設置和取消設置shopt選項,請使用以下命令:

  • -s :設置或啟用。
  • -u :取消設置或禁用。

由於默認情況下啟用了某些選項,因此檢查哪些選項處於打開狀態也很方便。 您可以使用-s-u選項來執行此操作,而無需使用選項名稱。 這會導致shopt列出打開和關閉的選項。

鍵入以下內容:

 商店-s 

 商店-u | 柱子

您可以使用不帶-s-u命令的shopt選項來查看每個選項的打開或關閉狀態。

例如,我們可以鍵入以下內容來檢查histverify選項的設置:

 購物歷史驗證

我們可以鍵入以下內容將其設置為打開:

 shopt -s histverify
廣告

然後,我們可以輸入以下內容再次檢查:

 購物歷史驗證

histverify選項更改history命令的一個方面的操作方式。 通常,如果您通過數字引用命令history來重複命令,例如!245 ,則從命令歷史記錄中檢索該命令並立即執行。

如果您希望查看命令以確保它是您所期望的並對其進行編輯,如有必要,請鍵入以下內容以將shopt histverify選項設置為 on:

 !245 

該命令被檢索並顯示在命令行上。 您可以通過按 Enter 來刪除、編輯或執行它。

相關:如何在 Linux 上使用 history 命令

autocd 選項

autocd選項設置為 on 的情況下,如果您在命令行中鍵入目錄的名稱並按 Enter,它將被視為您在其前面鍵入了cd

我們鍵入以下內容以打開autocd選項:

 shopt -s autocd

然後,我們輸入目錄的名稱:

 文件

cdspell 選項

cdspell選項打開時,Bash 將自動糾正簡單的拼寫錯誤和目錄名稱中的拼寫錯誤。

我們鍵入以下內容來設置cdspell選項:

 shopt -s cdspell
廣告

要嘗試更改為應具有大寫首字母的小寫目錄,我們鍵入以下內容:

 光盤文件

然後,我們可以鍵入以下內容來嘗試使用名稱中帶有額外“t”的目錄名稱:

 cd ../圖片

無論拼寫錯誤如何,Bash 都會更改為每個目錄。

xpg_echo 選項

xpg_echo選項設置為 on 時,echo 命令將遵循轉義字符,例如\n表示換行符, \t表示水平製表符。

首先,我們鍵入以下內容以確保已設置該選項:

 shopt -s xpg_echo
廣告

然後我們將\n包含在我們要傳遞給echo的字符串中:

 echo "這是第一行\n這是第二行" 

轉義的換行符強制在輸出中換行。

這會產生與-e (啟用轉義解釋) echo選項相同的行為,但xpg_echo允許它成為默認操作。

相關:如何在 Linux 上使用 Echo 命令

dotglob 選項

應該謹慎對待dotglob選項。 它允許以句點 ( . ) 開頭的文件和目錄包含在名稱擴展或“通配符”中。 這些被稱為“點文件”或“點目錄”,它們通常是隱藏的。 dotglob選項忽略其名稱開頭的點。

首先,我們將通過鍵入以下內容來搜索以“geek”結尾的文件或目錄:

 ls *極客

找到並列出了一個文件。 然後,我們將通過鍵入以下內容打開dotglob選項:

 shopt -s dotglob
廣告

我們發出相同的ls命令來查找以“geek”結尾的文件和目錄:

 ls *極客

這次找到並列出了兩個文件,其中一個是點文件。 當您將dotglob選項設置為打開時,您需要小心使用rmmv

nocaseglob 選項

nocaseglob選項類似於dotglob選項,除了nocaseglob會導致文件名和目錄中大小寫字母的差異在名稱擴展中被忽略。

我們鍵入以下內容來查找以“how”開頭的文件或目錄:

 怎麼做*

找到並列出了一個文件。 我們鍵入以下內容以打開nocaseglob選項:

 shopt -s nocaseglob

然後,我們重複ls命令:

 怎麼做* 

找到兩個文件,其中一個包含大寫字母。

使更改永久化

我們所做的更改只會持續到我們關閉當前的 Bash shell。 為了使它們在不同的 shell 會話中永久存在,我們需要將它們添加到我們的“.bashrc”文件中。

廣告

在您的主目錄中,鍵入以下命令以在圖形 Gedit 文本編輯器中打開“.bashrc”文件(或相應地更改它以使用您喜歡的編輯器):

 gedit .bashrc

gedit編輯器將打開並加載“.bashrc”文件。 您會看到其中已經有一些shopt條目。

加載了 .bashrc 的 gedit 編輯器,並突出顯示了 shopt 選項。

您也可以在此處添加自己的shopt選項。 添加它們後,保存更改並關閉編輯器。 現在,每當您打開新的 Bash shell 時,都會為您設置選項。

眼見為實的選擇

確實, shopt命令有很多選項,但如果有的話,您不必一次就掌握它們。 既然有這麼多,可能有一些你不會感興趣。

例如,有一些強制 Bash 以與特定的舊版本兼容的方式運行。 這可能對某人有用,但這是一個相當小眾的案例。

廣告

您可以查看 Bash 手冊頁或 GNU Bash 參考手冊。 確定哪些選項會對您產生影響,然後進行試驗。 請注意影響文件和目錄名稱擴展方式的選項。 使用良性命令(例如ls )嘗試它們,直到您對它們感到滿意為止。