2018年7月21日 星期六

bash: OPTIONS 和內建指令 set

bash 指令格式是 bash [--選項] [-選項] [引數],多字元選項「--選項」必須放在單字元選項「-選項」前面,之後是引數。通常第一個引數是指令 ($0),剩下引數傳給指令使用 ($1, $2, ...)。

單字元選項可使用內建指令 set 支援的單字元選項外,還可以用下列選項:
  • -c:第一個引數還是一樣是指令,但傳給指令的 $0 是第二個引數,位置參數 $1 從第三個引數開始。$0 作為警告和錯誤訊息的指令名稱。
  • -iinteractive shell
  • -l 或 --login:啟動為 login shell
  • -r:見 RESTRICTED SHELL
  • -s:指令從標準輸入讀取,不用引數的指令。在 interactive shell 設定為位置參數。
  • -D--dump-strings:在標準輸出印出所有前置 $ 的雙引號字串,當 locale 不為 C 或 POSIX 時會做語言轉換。隱含 -n 選項,不執行指令。
  • [-+]O [shopt_option]:-O 設定內建指令 shopt 的 shell 選項,+O 清掉。沒有 shopt_option 時,印出這些選項的名稱及值,如果用 +O 輸出可作為輸入的格式。
  • ---:表示選項結束,之後的引數視為檔名及其引數。
其它多字元選項:
  • --debugger:在 shell 開始前安排執行 debugger profile,啟用 extended 除錯模式 (見 bash 內建指令 shopt 選項 extdebug 的說明)
  • --dump-po-strings:相當於 -D,但以 GNU gettext po (portable object) 檔案格式輸出。
  • --help:顯示使用說明。
  • --init-file file--rcfile file:在 interactive shell 改執行 file 取代 /etc/bash.bashrc 及 ~/.bashrc (見 bash INVOCATION)。
  • --noediting:在 interactive shell 不使用 GNU readline 函式庫來讀取指令行。
  • --noprofile:不執行 /etc/profile、~/.bash_profile、~/.bash_login、或 ~/.profile。login shell 預設執行這些檔案 (見 bash INVOCATION)
  • --norc:在 interactive shell 不執行 /etc/bash.bashrc 及 ~/.bashrc。以 sh invoke 時預設啟用。
  • --posix:行為符合 POSIX 標準模式。見 SEE ALSO 參考  how posix mode affects bash's behavior 細節的文件。
  • --restricted:restricted shell (見 bash RESTRICTED SHELL).
  • --verbose:相當於 -v。
  • --version:顯示版本訊息。

內建指令 set

功能有設定 shell 選項、設定位置參數、列變數

set [--abefhkmnptuvxBCEHPT] [-o option-name] [arg ...]
set [+abefhkmnptuvxBCEHPT] [+o option-name] [arg ...]
set #依順序列出所有 shell 變數
set arg ... #依序設定位置參數 $1、$2、 ...

指令的選項用來設定或清除 shell 選項。除非特別說明,選項預設是關閉的。使用 --o 開啟選項,++o 關閉選項。

$- 可看到目前的選項。

指令選項說明如下:

-a 或 -o allexport

每個新建或更改的變數,export 到接下來指令的環境。

-b 或 -o notify

立刻回報結束的背景工作,而不是等到下個指令提示。

-e 或 -o errexit

待續

-f 或 -o noglob

停用 pathname 擴展。

-h 或 -o hashall

記憶執行時查到的指令路徑,預設是開啟的。

-k 或 -o keyword

待續

-m 或 -o monitor

待續

-n 或 -o noexec

讀取指令但不執行。可用來檢查 shell 指令搞是否有 syntax errors。在 interactive shell 沒作用。

-o option-name

沒 option-name 時列出目前 shell 選項設定,+o 顯示一系列 set 指令,可用來重新建立目前選項設定。

option-name 大多搭配有單字元格式,沒有的有:
  • emacs:使用 emacs-style 指令行編輯界面。interactive shell 預設啟用,除非 shell 時使用選項 --noediting。同時影響編輯界面用來讀取 -e。
  • history:啟用指令歷史功能 (見 bash HISTORY)。interactive shell 預設啟用。
  • ignoreeof:等同執行 shell 指令 ``IGNOREEOF=10''。(見 Shell Variables).
  • nolog:目前忽略
  • pipefail:回傳最後失敗指令的回傳值。
  • posix:使用 posix 模式。.
  • vi:使用 vi-style 指令行編輯界面。同時影響編輯界面用來讀取 -e。

-p 或 -o privileged

開啟特權 (privileged) 模式,此時 $ENV 及 $BASH_ENV 的檔案不處理,不自環境繼承 shell 函數,忽略變數 SHELLOPTS、BASHOPTS、CDPATH、及 GLOBIGNORE。
如果 shell 開始時的 effective user (group) ID 和 real user (group) ID 不同,也進行
這些動作。此時如果 -p 沒設,effective user id (group) 會設為 real user (group) id;如果有設,則不動 effective user (group) id。

-t 或 -o onecmd

讀完執行一個指令離開。

-u 或 -o nounset

待續

-v 或 -o verbose

印出讀到的輸入行。

-x 或 -o xtrace

trace 模式。擴展每個 simple command、for、case、select、或 arithmetic for 後,顯示 PS4 和指令。

-B 或 -o braceexpand

進行 brace expansion (見 bash Brace Expansion),預設啟用。

-C 或 -o noclobber

>,  >&,  and <> redirection operators 不覆寫存在的檔案。對 >| 則不影響。

-E 或 -o errtrace

待續

-H 或 -o histexpand

待續

-P 或 -o physical

待續

-T 或 -o functrace

待續

--

表示是最後的指令選項,接下來有引數的話,設定位置參數,否則重置位置參數。

-

表示是最後的指令選項,接下來有引數的話,設定位置參數。關閉指令選項 -x 和 -v。

參考來源

man bash OPTIONS 節、內建指令 set

沒有留言:

張貼留言

SIP header Via

所有 SIP 訊息 都要有 Via,縮寫 v。一開始的 UAC 和後續途經的每個 proxy 都會疊加一個 Via 放傳送的位址,依序作為回應的路徑。 格式 sent-protocol sent-by [ ;branch= branch ][ ; 參數 ...] s...