shell內建命令Shopt
此內建命令改變額外的shell的可選行為。
shopt
shopt [-pqsu] [-o] [optname …]
切換那些用來控制shell的各種可選的行為的變量的值。不帶選項,或使用-p選項,則顯示所有可設置的選項的列表,同時表明該選項是否被設置。 -p選項以可重用為輸入的形式來顯示輸出。其他選項有以下含義:
-s
啟用每個optname。(set)
-u
關閉每個optname。(unset)
-q
抑制正常輸出;返回狀態表示optname是否啟用。當有-q選項,且如果有多個optname參數時,若所有optname被啟用,則返回值是零;否則返回非零值。
-o
限制optname的值,僅可以使用內建命令set的-o選項所定義的值。(見內建命令set)
如果使用-s或者-u,且沒有optname參數,則顯示結果的范圍僅限於那些啟用或關閉的相應選項。
除非特別說明,shopt選項默認是關閉的。
列出選項時,如果所有optname都是啟用狀態,則返回值是0,否則是非零值。在設置或取消選項時,返回狀態是零,除非某個optname不是有效的shell選項。
shopt的選項列表如下:
autocd
如果設置的話,某個目錄的名字被當做cd命令的參數執行。此選項僅在交互式shell中使用。
cdable_vars
如果設置的話,內建命令cd的不是目錄名的參數,被當做變量名,該變量的值就是要被切換到的目錄。
cdspell
如果設置,cd命令的目錄部分的小的拼寫錯誤將得到更正。這些錯誤包括顛倒的字符,缺少的字符,和多余的一個字符。如果能找到校正後的結果,則校正後的路徑被打印出來,並執行命令。此選項僅用於交互式shell。
checkhash
如果設置,Bash在執行該命令前,在哈希表中檢查是否存在該命令。如果在哈希表中不存在,則執行一個正常的路徑搜索。
checkjobs
如果設置,Bash在退出交互shell前,列出所有停止的和正在運行的作業的狀態。如果有任何作業正在運行,這將導致退出的時間推遲到第二次沒有干預命令的退出(參見作業控制)。如果有任何作業被停止,shell總是推遲退出。
checkwinsize
如果設置,Bash在每個命令後,檢查窗口大小,如果必要的話,更新LINES和COLUMNS的值。
cmdhist
如果設置,Bash在同一個歷史實體裡面保存一個多行命令的所有行的內容。這樣便於重新編輯多行命令。
compat31
如果設置,Bash改變它的行為以符合3.1版本,條件命令操作符‘=~’被引號包括的參數的方式。
compat32
如果設置,Bash改變它的行為以符合3.2版本,當使用‘[[’條件命令的'<' 和 '>'操作符時,區域特定字符串比較的方式。bash-4.0之前版本的Bash使用ASCII定序和strcmp(3);bash-4.1及之後的版本使用當前區域設置的定序和strcoll(3)。
compat40
如果設置,Bash改變它的行為以符合4.0版本,當使用‘[[’條件命令的'<' 和 '>'操作符時,區域特定字符串比較的方式(見上一個項目),以及對中斷一個命令列表的影響。
compat41
如果設置,Bash在POSIX模式時,將位於雙引號參數擴展中的單引號當做特殊字符。單引號必須匹配(偶數個),單引號之間的字符被認為是引號包圍的。這是POSIX模式4.1版本的行為。其他默認的Bash的行為仍然和以前的版本一樣。
dirspell
如果設置,當輸入的目錄名不存在時,Bash將在輸入過程中自動修改拼寫。
dotglob
如果設置,Bash在文件名擴展的結果中包含以‘.’開頭的文件名。
execfail
如果設置,非交互shell在不能執行內建命令exec的參數所指定的文件時,將不會退出。如果exec失敗,交互式shell不退出。
expand_aliases
如果設置,所有別名以下述“別名”節的描述擴展。交互式shell中,此選項默認啟用。
extdebug
如果設置,啟用調試器可用的行為:
1.declare內建命令的-F選項,顯示作為參數提供的每個對應的函數名的源文件和行號。
2.如果使用DEBUG陷阱運行的命令返回一個非零值,下一個命令被跳過且不執行。
3.如果使用DEBUG陷阱運行的命令返回一個值2,並且shell在子過程中(是使用.或者source命令執行)執行,則 模擬一個對return的調用。
4.BASH_ARGC 和 BASH_ARGV 按照他們的描述更新。(參見Bash變量)
5.啟用函數跟蹤:命令替換,shell函數,和使用( command )調用的子shell繼承DEBUG和RETURN陷阱。
6.啟用錯誤跟蹤:命令替換,shell函數,和使用( command )調用的子shell繼承ERR陷阱。
extglob
如果設置,啟用上述的擴展模式匹配功能。(見模式匹配)
extquote
如果設置,在雙引號中的 ${parameter} 擴展中的$'string' 和 $"string" 被執行引號擴展。此選項默認啟用。
failglob
如果設置,文件名擴展時發生的模式匹配失敗會引發擴展錯誤。
force_fignore
如果設置,當執行單詞補全時,由FIGNORE指定的那些後綴的shell變量將忽略單詞,即使被忽略的單詞是唯一的補全候補。關於FIGNORE,請查看bash變量章節。該選項默認啟用。
globstar
如果設置,在文件名擴展中使用的模式“**”將匹配所有文件和0個或多個目錄和子目錄。如果模式以‘/’結尾,則僅僅匹配目錄和子目錄。
gnu_errfmt
如果設置,shell錯誤信息將按照標准GNU錯誤信息格式輸出。
histappend
如果設置,當shell退出時,命令歷史列表將追加到由變量HISTFILE設定的文件中,而不是覆蓋該文件。
histreedit
如果設置,將使用Readline,用戶將有機會重新編輯失敗的命令歷史替換。
histverify
如果設置,將使用Readline,命令歷史替換的結果不會立即傳遞給shell解釋器。而是被加載到Readline緩沖區,以允許將來修改。
hostcomplete
如果設置,將使用Readline,當單詞含有‘@’時, Bash會嘗試執行主機名完成。(請參看“命令完成”)。該選項默認啟用。
huponexit
如果設置,當交互shell退出時,Bash將發送SIGHUP到所有作業。(請參看“信號”)
interactive_comments
在交互shell中,以‘#’開頭的單詞將導致該單詞及該行該單詞之後的所有字符都被忽略。該選項默認開啟。
lastpipe
如果設置,並且作業控制未激活,則運行管道的最後一個命令的shell不在當前shell環境的後台執行。
lithist
如果設置,並且cmdhist選項被設置了,則多行命令被保存到歷史中時,包含換行符,而不是使用分號代替。
login_shell
如果shell是從登錄shell啟動的,則該shell設置此選項。(見“調用 Bash”)該值不可更改。
mailwarn
如果設置,並且Bash用來檢測郵件的文件,在上次檢測之後再次被存取時,則顯示“The mail in mail file has been read”。
no_empty_cmd_completion
如果設置,並且使用了Readline,Bash在空行上不再試圖從PATH中搜索可用的命令完成。
nocaseglob
如果設置,執行文件名擴展時,Bash以大小寫不敏感方式匹配文件名。
nocasematch
如果設置,執行case或者 [[ 條件命令時,Bash以大小寫不敏感方式匹配模式。
nullglob
如果設置,Bash允許不匹配任何文件的文件名模式被擴展為一個空字符串,而不是模式本身。
progcomp
如果設置,則可編程自動完成工具被激活。(見“可編程自動完成”)。此選項默認激活。
promptvars
如果設置,則提示符字符串在擴展後,還要執行參數擴展,命令替換,算數擴展和引號去除。(見打印提示符)。此選項默認激活。
restricted_shell
如果shell以限制模式被啟動,則設置此選項。(見“限制shell”)。該值不可更改。啟動文件被執行時,不重置此選項,以允許啟動文件能夠發現shell是否是限制的。
shift_verbose
如果設置,當shift計數器超過位置參數個數時,shift內建命令打印一條錯誤信息。
sourcepath
如果設置,source內建命令使用PATH的值,去尋找作為參數的文件名所在的目錄。此選項默認激活。
xpg_echo
如果設置,echo內建命令默認擴展反斜槓轉義序列。
如果所有optnames都激活了,則列出選項的命令返回狀態為0,否則為非零值。在設置或者取消選項的設置時返回狀態是0,除非optname不是有效的shell選項。