2018年7月21日 星期六

bash: ALIASES

alias 意思是「化名」。在 bash,每個 simple command 的第一個字符合某個 alias 名稱,會取代為對應的 alias 值。取代後的第一個字再繼續進行 alias,但如果是已經用過的 alias 名稱,就不再進行。例如 ls alias 為 ls -F 只會進行一次。如果 alias 的值的最後字元是一個 blank (依定義,blank 是 space 或 tab),指令下個字也進行 alias。

shell 有個 alias 列表,可透過內建指令 alias 和 unalias 來列出、設定和消除。alias 名稱不能包含字元 /、$、`、=、metacharacter 或 quoting 字元。alias 值可以包含任何 valid shell input,包括 metacharacters。

alias 用在互動式 shell,如果非互動式 shell 也要用,使用內建指令 shopt 設 expand_aliases。

alias 是在整行指令讀取時進行,而不是執行時進行。同行的新 alias 定義要等到指令執行完才會生效,並不會對同行指令生效。在 function 也是同樣的,alias 是在 function 定義讀取時進行,function 裡的新 alias 定義要等到 function 執行才會生效。安全的作法是把 alias 定義放在自己獨立一行,不要用在 compound command。

alias 進行優先於 shell function。

內建指令:alias [-p] [name[=value] ...]

alias 或 alisa -p 以 alias name=value 格式印出所有 alias 或印指定 name 的 alias。
設定 name 的 alias 為 value。

內建指令:unalias [-a] [name ...]

移除 alias 名稱 name。選項 -a 移除所有 alias。

shell 變數 BASH_ALIASES

由 alias 名稱作為 index 的一個  associative  陣列,成員是 alias 表。陣列新增成員會出現在 alias 表,但清除成員目前並不會從 alias 表移除。如果 unset BASH_ALIASES 會失去其特殊 properties。

列出 BASH_ALIASES
$ declare -p BASH_ALIASES

$ for k in "${!BASH_ALIASES[@]}"; do printf '%s => %s\n' "$k" "${BASH_ALIASES[$k]}"; done

參考來源

  1. bash 的 ALIASES 節、內建指令 alias、shell 變數 BASH_ALIASES
  2. https://unix.stackexchange.com/questions/109124/bash-aliases-not-equal-to-alias

沒有留言:

張貼留言

SIP header Via

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