Alias (命令)

在計算機運算中，alias 是許多命令列介面的命令，比如 Unix shell，4DOS/4NT 和 Windows PowerShell 等，它給使用者提供了別名——也就是用自定義字串替換指定命令的功能，通常用於簡寫系統命令，或給常用命令新增預設選項，MS-DOS 和 Microsoft Windows 作業系統內，通常使用 codice_1 命令定義別名。alias 命令的作用時間是命令執行之後到 shell 會話結束，經常使用的別名可在 shell 的配置檔案比如 C Shell的 codice_2 或 Bourne Again Shell 的 codice_3 裡定義，如此當相應的 shell 會話啟動後就可以使用這些自定義的別名了。alias 命令可以直接寫入這些配置檔案，或單獨放在一個檔案，比如 .alias 裡，或依使用者使用的直譯器分別定義於 .alias-bash，.alias-csh 等檔案，然後使用 source 命令執行該檔案來設定。定義別名.別名可以使用給 alias 命令指定鍵值對引數的方式定義，在 Bash 內，語法如下：alias copy='cp'同樣的別名，在 csh 或 tcsh 裡可以這樣指定：alias copy "cp"這個別名的作用，是當用戶在命令列內輸入 copy 時，命令列直譯器會把該命令替換為 cp 命令來執行。在 4DOS/4NT 命令列內，可以使用以下命令把 cp 定義為 4DOS 的 codice_4 命令的別名：alias cp copy要在 Windows PowerShell 內定義別名，可以使用以下命令：new-alias ci copy-item以上命令給 Windows PowerShell 的 codice_5 命令定義了一個別名 codice_6，因此使用者在 Windows PowerShell 裡輸入 ci 時，實際執行的是 codice_5 命令。歷史.Unix 內，alias 命令是由 C shell 引入的，之後也被加入到 tcsh 和 Bash 內。C shell 的別名被嚴格限制在一行裡，複雜的 shell 語言則需要多行，不過單行別名對建立快捷的命令仍然很有用。Bourne shell則同時支援函式和別名，並建議在可能時儘量使用函式。檢視當前已定義的別名.要檢視當前命令列已定義的別名，可以用以下命令：alias # 不帶引數執行 alias 命令，可顯示當前已定義的別名列表alias -p # 同上，但在 4DOS/4NT 和 PowerShell 裡無效alias "myAlias" # 顯示指定別名取代的實際命令忽略別名.在 Unix shells 裡，如果別名已經指定過，可以把命令放在引號裡，或在前面新增一個反斜槓來使別名定義失效。比如，若已定義了以下別名：alias ls='ls -la'要使以上別名失效並強制執行原始的 codice_8 命令，可使用以下語法：'ls'或\ls在 4DOS/4NT 命令列裡，則可以在命令前面新增星號來使已定義的別名失效，比如，可用以下方式定義別名：alias dir = *dir /2/p第二個 dir 命令前的星號，確保其執行的是原始的 dir 命令，避免遞迴地別名展開，使用者還可以執行以下命令，確保執行的是原始dir 命令：*dir更改別名.在 Windows PowerShell 裡，可使用以下命令更改一個已經存在的別名：set-alias ci cls執行以上命令後，codice_6 將變成 codice_10 命令的別名。刪除別名.在 Unix shell 和 4DOS/4NT 裡，別名可以透過 codice_11 命令清除：unalias copy # 刪除 copy 別名unalias -a # -a 選項會清除所有已定義的別名，此選項在 4DOS/4NT 裡無效unalias * # 4DOS/4NT 的清除別名命令，支援萬用字元在 Windows PowerShell 裡，別名可用以下命令刪除：remove-item alias:ci # 刪除別名 ci特性.Chaining.別名通常只替換第一個詞，但有些命令列直譯器，比如 Bash 和 ksh 允許替換一個字元序列或幾個單詞，這個特性使用 shell 函式方式是做不到的。通常的語法是在第一個定義的別名所替換的命令後加一個空格，比如定義以下兩個別名：alias list='ls ' # 注意 ls 後面的空格alias long='-Flas' # ls 的選項然後可執行list long myfile # 執行時被解釋為 codice_12來列出檔案詳細資訊，可見命令列直譯器對 long 也進行了別名展開。別名裡的引用.要使用單引號定義一個裡面帶有單引號的別名，比如要給以下 perl 指令碼定義別名：$ perl -pe 's/^(.*) foo/$1 bar/;'你不能這樣簡單轉義：$ alias foo2bar='perl -pe \'s/^(.*) foo/$1 bar/;\" # 錯誤：反斜槓並不會對後一個字元進行轉義不過，可以這樣：$ alias foo2bar='perl -pe '\"s/^(.*) foo/$1 bar/;'\"' # 把反斜槓放在引號裡使之成為 '\'但你可以在雙引號裡使用單引號。$ alias foo2bar='perl -pe '"'"'s/^(.*) foo/$1 bar/;'"'""你也可以使用 shell 函式方式，而非使用別名。命令引數.在 C Shell 裡，命令的引數可以透過字串 \!* 嵌入到別名定義裡，比如定義以下別名：alias l-less 'ls \!* | less'然後執行 l-less /etc /usr，命令會被展開成 ls /etc /usr | less，即列出 /etc 和 /usr 兩個目錄的檔案，且滿屏後暫停，若沒有 \!*，alias l-less 'ls | less'會被展開成 ls | less /etc /usr，這將會錯誤的試圖用 less 開啟後兩個目錄。Bash 和 Korn shell 裡，可以使用 shell 函式做到，文的備選段落。典型別名.Bash 裡一些常用的別名：alias ls='ls --color=auto' # 輸出顯示為彩色alias la='ls -Fa' # 列出所有檔案alias ll='ls -Fls' # 列出檔案詳細資訊alias rm='rm -i' # 刪除前需確認alias cp='cp -i' # 覆蓋前需確認alias mv='mv -i' # 覆蓋前需確認alias vi='vim' # 輸入 vi 命令時使用 vim 編輯器Windows PowerShell 的標準別名：new-alias cd set-locationnew-alias ls get-childitemnew-alias dir get-childitemnew-alias echo write-outputnew-alias ps get-processnew-alias kill stop-process備選.別名應保持簡單，否則應考慮以下備選方式：別名最常見的使用方式，是給命令新增常用的選項，這可以使用定義簡單 Shell 函式的方式代替：alias ll='ls -Flas' # 列出檔案詳細資訊，別名方式ll () { ls -Flas "$@" ; } # 列出檔案詳細資訊，Shell 函式方式把 ls 本身定義成函式，可以用以下方式定義：