一些 Bash 選項是眾所周知並且經常使用的。 例如,很多人在腳本的開頭寫
設置-o xtrace
用於調試,
設置-o errexit
錯誤退出或
設定-o errunset
如果未設定被呼叫的變數則退出。
但還有很多其他選擇。 有時,它們在法力中的描述過於混亂,因此我在這裡收集了一些最有用的內容,並附有解釋。
注意:Mac 可能有較舊版本的 bash(3.x 而不是 4.x),其中並非所有這些選項都可用。 在這種情況下,請參閱
set
或 shopt
?
有兩種方法可以設定 bash 選項:從腳本或從命令列。 您可以使用內建指令 set
и shopt
。 兩者都改變了 shell 的行為,做很多相同的事情(使用不同的參數),但它們的差異 set
是從其他 shell 的參數繼承或借用的,而參數 shopt
在 bash 中創建。
如果您想查看當前選項,請運行:
$ set -o
$ shopt
若要啟動該選項 set
使用長語法或短語法:
$ set -o errunset
$ set -e
效果是一樣的。
要停用該選項,您需要輸入加號而不是減號:
$ set +e
很長一段時間我都記不住這個語法,因為邏輯似乎是錯誤的(減號啟用該選項,加號禁用它)。
В shopt
(更符合邏輯)標誌用於啟用和停用選項 -s
(設定)和 -u
(未設定):
$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= off
更改目錄
有幾個選項可以幫助您使用目錄。
1.CD拼寫
透過此設置,bash 將開始識別拼寫錯誤,並將您帶到名稱拼寫錯誤的資料夾。
$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..
我已經使用這個選項很多年了,很少(也許每年一次)它會做出一個非常奇怪的決定。 但在其他日子 cdspell
每天都可以節省時間。
2. 自動光碟
如果您不願意接受多次輸入的低效率 cd
,那麼您可以設定此選項,如果 X 命令不存在,請移動到 X 資料夾。
$ shopt -s autocd
$ abcdefg
$ cd ..
與自動完成功能結合,您可以在資料夾之間快速跳轉:
$ ./abc[TAB][RETURN]
cd -- ./abcdefg
只是不要命名資料夾 rm -rf *
(是的,順便說一句,這是可能的)。
3.dir展開
這是一個很酷的選項,可以透過按 Tab 來擴展環境變數:
$ shopt -s direxpand
$ ./[TAB] # заменяется на...
$ /full/path/to/current_working_folder
$ ~/[TAB] # заменяется на...
$ /full/path/to/home/folder
$ $HOME/[TAB] # заменяется на...
$ /full/path/to/home/folder
乾淨的輸出
4. 檢查工作
如果後台仍有作業運行,此選項將停止登出工作階段。
顯示未完成任務的列表,而不是退出。 如果仍想退出,則重新進入 exit
.
$ shopt -s checkjobs
$ echo $$
68125 # <= ID процесса для оболочки
$ sleep 999 &
$ exit
There are running jobs.
[1]+ Running sleep 999 &
$ echo $$
68125 # <= ID процесса для оболочки тот же
$ exit
There are running jobs.
[1]+ Running sleep 999 &
$ exit
$ echo $$
$ 59316 # <= на этот раз ID процесса изменился
替代超能力
5.環球星
這個選項給你替代超能力! 如果您輸入:
$ shopt -s globstar
$ ls **
那麼 shell 將會遞歸地顯示所有目錄和子目錄。
與...結合使用 direxpand
您可以快速查看層次結構中較低的所有內容:
$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n)
6.extglob
此選項啟用與正規表示式更常見關聯的功能。 有時這非常有用:
$ shopt -s extglob
$ touch afile bfile cfile
$ ls
afile bfile cfile
$ ls ?(a*|b*)
afile bfile
$ ls !(a*|b*)
cfile
這裡,模式被放置在括號中並由豎線分隔。 以下是可用的運算子:
? = 匹配零次或一次出現的給定模式! = 顯示所有與給定模式不符的內容 * = 出現零次或多次 + = 出現一次或多次 @ = 恰好出現一次
意外保障
7. 歷史驗證
剛開始使用縮寫歷史記錄中的快速啟動命令可能會有點害怕 !!
и !$
.
選項 histverify
讓您在實際運行之前首先了解 Bash 如何解釋該命令:
$ shopt -s histverify
$ echo !$ # <= По нажатию Enter команда не запускается
$ echo histverify # <= Она сначала демонстрируется на экране,
histverify # <= а потом запускается
8. 諾克洛伯
再次強調,為了防止意外發生,即使用重定向運算子覆寫已經存在的檔案(>
)。 如果您沒有備份,這可能會是一場災難。
選項 set -С
禁止此類覆蓋。 如有必要,您可以使用運算符繞過保護 >|
:
$ touch afile
$ set -C
$ echo something > afile
-bash: afile: cannot overwrite existing file
$ echo something >| afile
$
來源: www.habr.com