2018年7月22日 星期日

bash: SHELL BUILTIN COMMANDS

內建指令是 shell 本身提供的指令,有些 shell 用外部指令取代。

除非特別說明,接受「-」開頭選項的內建指令也接受「--」來表示選項的結束。但「:」、「true」、「false」、及「test」並不接受選項,也就不處理「--」。「exit」、「logout」、「break」、「continue」、「let」、及「shift」接受及處理「-」開始的引數,不需要「--」作為結束。其它接受引數、但不接受選項的內建指令,「-」開始的引數會解釋為無效的選項,需要「--」來避免這種情況。

: [arguments]

只是擴展 arguments 及進行指定的轉向。

.  filename [arguments]
source filename [arguments]

在當下的 shell 環境執行 filename。如果 filename 不含 slash,會去 PATH 找 filename (不需要可執行)。如果 bash 不在 posix  模式,會再找目前目錄。如果內建指令 shopt 的選項 sourcepath 關閉,不找 PATH。如果有任何 arguments,會成為位置參數。

如果 -T 選項啟用,繼承 DEBUG trap。如果沒啟用,DEBUG trap 字串會備份後清掉,執行完再回復。參考內建指令 set。

alias [-p] [name[=value] ...]

bg [jobspec ...]


bind [-m keymap] [-lpsvPSVX]
bind [-m keymap] [-q function] [-u function] [-r keyseq]
bind [-m keymap] -f filename
bind [-m keymap] -x keyseq:shell-command
bind [-m keymap] keyseq:function-name
bind [-m keymap] keyseq:readline-command

bash readline 按鍵對應功能的顯示和綁定、或設定 readline 變數。

每個非選項的引數是如同 .inputrc 的指令,但 binding 跟 command 需要用不同引數傳遞
。例如「"\C-x\C-r":  re-read-init-file」.

選項:
  • -m keymap:keymap 可為 emacs (emacs-standard)、emacs-meta、emacs-ctlx、vi (vi-command)、vi-move、及 vi-insert,影響後續的綁定。
  • -l:列出所有 readline 功能名稱
  • -p:顯示 readline 功能名稱及綁定 (可輸入格式)
  • -P:顯示 readline 功能名稱及綁定
  • -s:顯示 readline key sequences bound to macros and the strings they output (可輸入格式)
  • -S:顯示 readline key sequences bound to macros and the strings they output.
  • -v:顯示 readline 變數名稱及值 (可輸入格式)
  • -V:顯示 readline 變數名稱及值
  • -f filename:自 filename 讀取 key bindings
  • -q function:詢問 function 綁定的 key
  • -u function:取消 function 綁定的 key
  • -r keyseq:移除任何目前 keyseq 的綁定
  • -x keyseq:shell-command:輸入 keyseq 執行 shell-command。shell-command 執行時, shell 設定變數 READLINE_LINE 為 readline line buffer 內容及 READLINE_POINT 為目前游標位置。如果執行的指令改變 READLINE_LINE 或 READLINE_POINT 的值,將會反應在編輯狀態。
  • -X:列出綁定到 shell command 的 key sequence 和 shell command (可輸入格式)

break [n]

跳脫 n 層 for、while、until、或 select 迴圈,n 預設為 1。

builtin shell-builtin [arguments]

用內建指令執行。
當定義的 function 名稱跟內建指令相同時,用來強制使用內建指令。

內建指令 cd 常常用 function 重新定義。

如果 shell-builtin 不是一個內建指令,回傳值是 false。

caller [expr]


cd [-L|[-P [-e]] [-@]] [dir]


command [-pVv] command [arg ...]


compgen [option] [word]


complete [-abcdefgjksuv] [-o comp-option] [-DE] [-A action]  [-G glob‐pat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] name [name ...]
complete -pr [-DE] [name ...]


compopt [-o option] [-DE] [+o option] [name]


continue [n]

直接開始下一回 for、while、until、或 select 的控制迴圈。如果有 n,開始第 n 層封閉迴圈。如果 n 超出所有封閉迴圈層數,則使用最外層。

declare [-aAfFgilnrtux] [-p] [name[=value] ...]
typeset [-aAfFgilnrtux] [-p] [name[=value] ...]


dirs [-clpv] [+n] [-n]


disown [-ar] [-h] [jobspec ... | pid ... ]


echo [-neE] [arg ...]


enable [-a] [-dnps] [-f filename] [name ...]

啟用及停用內建指令。
停用某個內建指令可以不用指令完整路徑執行同名的外部指令

範例:
  • `enable -n test` 停用內建指令 test
  • `enable test` 啟用內建指令 test
  • `enable` 或 `enable -p` 列出啟用的內建指令
  • `enable -n` 列出停用的內建指令
  • `enable -a` 列出所有內建指令,無論啟用及停用的
  • `enable -s` 列出啟用的 POSIX 內建指令
  • `enable -f filename name` 載入 filename (shared object 檔) 作為內建指令 name。
  • `enable -d` 移除之前透過 -f 載入的內建指令

eval [arg ...]

exec [-cl] [-a name] [command [arguments]]

執行 command 取代原本 process。
  • -l:在引數 0 前置「-」,如同指令 login。
  • -c:以空的環境變數執行。
  • -a name:使用 name 作為引數 0 (指令名稱)
shopt 選項 execfail 啟用:command 在非 interactive shell 無法執行時,不離開,改回傳失敗。

exit [n]


export [-fn] [name[=word]] ...
export -p


fc [-e ename] [-lnr] [first] [last]
fc -s [pat=rep] [cmd]


fg [jobspec]


getopts optstring name [args]


hash [-lr] [-p filename] [-dt] [name]

help [-dms] [pattern]


history [n]
history -c
history -d offset
history -anrw [filename]
history -p arg [arg ...]
history -s arg [arg ...]


jobs [-lnprs] [ jobspec ... ]
jobs -x command [ args ... ]


kill [-s sigspec | -n signum | -sigspec] [pid | jobspec] ...
kill -l|-L [sigspec | exit_status]


let arg [arg ...]

每個 arg 是要 evaluated 的 arithmetic expression。如果最後 arg evaluates 為 0,回傳 1,否則回傳 1。

local [option] [name[=value] ... | - ]


logout

登出,離開 login shell。

mapfile  [-d  delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]
readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]


popd [-n] [+n] [-n]


printf [-v var] format [arguments]


pushd [-n] [+n] [-n]
pushd [-n] [dir]


pwd [-LP]


read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]


readonly [-aAf] [-p] [name[=word] ...]


return [n]


set [--abefhkmnptuvxBCEHPT] [-o option-name] [arg ...]
set [+abefhkmnptuvxBCEHPT] [+o option-name] [arg ...]

shift [n]

所有位置參數往前位移 n 個位置,沒給 n 值時當作 1。n 超出範圍不動作,回傳失敗。

shopt [-pqsu] [-o] [optname ...]


suspend [-f]


test expr 或 [ expr ]


times

印出 shell 和透過其執行的累計使用者和系統時間。

trap [-lp] [[arg] sigspec ...]


type [-aftpP] name [name ...]


ulimit [-HSabcdefiklmnpqrstuvxPT [limit]]

控制 shell 和啟始的 process 可用的資源。選項 -H 及 -S 分別指定只設定 hard limt 或 soft limit,不然兩者都設。hard limit 設定之後只有 root 可以增加。soft limit 不能增加超過 hard limit。limit 可以是一個數字 (依據特定資源的單位),或是 hard、soft、或 unlimited 之一。如果省略 limit,預設印出目前的 soft limit,除非加 -H 選項。如果一次要印出多個資源,資源名稱及單位會印在值之前。參數沒指定資源時,預設是 -f,指檔案最大可寫入的大小。值大多以 1024-byte 為單位,-c 和 -f 在 posix 模式以 512-byte 為單位。其它選項說明如下:
  • -a:印出所有資源限制。
  • -b:最大 socket buffer 數目。
  • -c:最大建立的 core files 大小。
  • -d:最大 process 的 data segment 大小。
  • -e:最大 scheduling priority ("nice")。
  • -f:最大檔案可寫入的大小。
  • -i:最多 pending signals 的數目。
  • -k:最多可配置的 kqueue 數目。
  • -l:最大可 locked into memory 的大小。
  • -m:最大 resident set 大小 (許多系統不 honor this limit)。
  • -n:最多可開啟的 file descriptor (大部分系統不允許設定)。
  • -p:pipe 大小,以 512-byte block 為單位。(可能不能設。)
  • -q:在 POSIX message queues 最大 byte 數。
  • -r:最大 real-time scheduling priority。
  • -s:最大 stack 大小。
  • -t:最大 cpu time 秒數。
  • -u:單一使用者最多 process 數目。
  • -v:shell (或其 children) 最大 virtual memory。
  • -x:最多可鎖定的檔案數目。
  • -P :最多虛擬終端機數目。
  • -T:最大 thread 數目。

umask [-p] [-S] [mode]


unalias [-a] [name ...]

unset [-fv] [-n] [name ...]


wait [-n] [n ...]

參考來源

bash man page 的 SHELL BUILTIN COMMANDS

沒有留言:

張貼留言

SIP header Via

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