Alias (命令)

在计算机运算中，alias 是许多命令行界面的命令，比如 Unix shell，4DOS/4NT 和 Windows PowerShell 等，它给用户提供了别名——也就是用自定义字符串替换指定命令的功能，通常用于简写系统命令，或给常用命令添加默认选项，MS-DOS 和 Microsoft Windows 操作系统里，通常使用DOSKey 命令定义别名。
alias 命令的作用时间是命令运行之后到shell 会话结束，经常使用的别名可在shell 的配置文件比如C Shell（csh）的 ~/.cshrc 或 Bourne Again Shell 的 ~/.bashrc 里定义，如此当相应的shell 会话启动后就可以使用这些自定义的别名了。alias 命令可以直接写入这些配置文件，或单独放在一个文件，比如 .alias 里，或依用户使用的解释器分别定义于.alias-bash，.alias-csh 等文件，然后使用source 命令执行该文件来设定。

定义别名

别名可以使用给alias 命令指定键值对参数的方式定义，在 Bash 里，语法如下：
alias copy='cp'
同样的别名，在 csh 或 tcsh 里可以这样指定：
alias copy "cp"
这个别名的作用，是当用户在命令行里输入copy 时，命令行解释器会把该命令替换为cp 命令来执行。
在 4DOS/4NT 命令行里，可以使用以下命令把cp 定义为4DOS 的 copy 命令的别名：
alias cp copy
要在Windows PowerShell 里定义别名，可以使用以下命令：
new-alias ci copy-item
以上命令给Windows PowerShell 的 copy-item 命令定义了一个别名ci，因此用户在Windows PowerShell 里输入ci 时，实际执行的是copy-item 命令。

历史

Unix 里，alias 命令是由C shell 引入的，之后也被加入到tcsh 和 Bash 里。C shell 的别名被严格限制在一行里，复杂的shell 语言则需要多行，不过单行别名对创建快捷的命令仍然很有用。Bourne shell（sh）里没有别名功能，但它有更强大的shell 函数方式。Bash 和 Korn shell（ksh）则同时支持函数和别名，并建议在可能时尽量使用函数。

查看当前已定义的别名

要查看当前命令行已定义的别名，可以用以下命令：
alias          # 不帶參數運行alias 命令，可顯示當前已定義的别名列表alias -p       # 同上，但在4DOS/4NT 和 PowerShell 里無效alias myAlias  # 顯示指定别名取代的實際命令

忽略别名

在 Unix shells 里，如果别名已经指定过，可以把命令放在引号里，或在前面添加一个反斜杠来使别名定义失效。比如，若已定义了以下别名：
alias ls='ls -la'
要使以上别名失效并强制执行原始的ls 命令，可使用以下语法：
'ls'
或
\ls
在 4DOS/4NT 命令行里，则可以在命令前面添加星号来使已定义的别名失效，比如，可用以下方式定义别名：
alias dir = *dir /2/p
第二个dir 命令前的星号，确保其运行的是原始的dir 命令，避免递归地别名展开，用户还可以运行以下命令，确保运行的是原始（未设定别名的）dir 命令：
*dir

更改别名

在 Windows PowerShell 里，可使用以下命令更改一个已经存在的别名：
set-alias ci cls
运行以上命令后，ci 将变成cls 命令的别名。

删除别名

在 Unix shell 和 4DOS/4NT 里，别名可以通过unalias 命令清除：
 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      # 运行时被解释为ls -Flas myfile
来列出文件详细信息，可见命令行解释器对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-location

new-alias ls get-childitem
new-alias dir get-childitem

new-alias echo write-output
new-alias ps get-process
new-alias kill stop-process