alias (命令)

Multi tool use
Multi tool use






在计算机运算中,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 命令执行该文件来设定。




目录






  • 1 定义别名


  • 2 历史


  • 3 查看当前已定义的别名


  • 4 忽略别名


  • 5 更改别名


  • 6 删除别名


  • 7 特性


    • 7.1 Chaining


    • 7.2 别名里的引用


    • 7.3 命令参数




  • 8 典型别名


  • 9 备选


  • 10 参考资料


  • 11 外部链接





定义别名


别名可以使用给 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/;'''' # 把反斜杠放在引号里使之成为 ''

但你可以在双引号里使用单引号。[1]


 $ 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 打开后两个目录。[2]


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


备选


别名应保持简单,否则应考虑以下备选方式:



  • 命令脚本,通过脚本可以创建新的系统命令。


  • 符号链接,可放在 /usr/local/bin 给所有用户使用,或放在用户自己的 $HOME/bin 目录,只供自己使用。这提供了一个调用命令的新方式,并在某些情况下,对少数支持使用调用名选择操作模式的命令,允许使用其隐含的命令函数。

  • Shell 函数,特别是如果命令需要修改 shell 内部运行环境(如环境变量)、改变当前工作目录、或在非交互 shell 使用情况下出现在搜索路径里面(特别是“较安全的” rmcpmv 版本等等)。

别名最常见的使用方式,是给命令添加常用的选项,这可以使用定义简单 Shell 函数的方式代替:


 alias ll='ls -Flas'              # 列出文件详细信息,别名方式
ll () { ls -Flas "$@" ; } # 列出文件详细信息,Shell 函数方式

ls 本身定义成函数,可以用以下方式定义(注意这是 Bash 的 ls 命令,较老的 Bourne shell 需要使用 /bin/ls 代替):


 ls () { command ls --color=auto "$@" ; }


参考资料




  1. ^ StackOverflow 上的解释


  2. ^ 给别名传递参数的示例 互联网档案馆的存檔,存档日期2012-11-25.



外部链接




  • alias: 定义或显示别名 – 命令与工具(Commands & Utilities)参考,单一UNIX®规范第7期,由國際開放標準組織发布

  • Bash 的 alias 手册页

  • The Linux 信息项目(LINFO)上的 alias 命令

  • 在Linux中设置Alias别名










SOS1ZpE2 Y7G,g MDuHRmV,iO6MNW8bnECIOuNhUus,U8 X7VvidVjb73DcqVsmI0 V8yalDttFi06dNL mnpJr97gtEkR6HbMFX ZVUx IFL
2dF,3TVfIGKAU

Popular posts from this blog

How to pass form data using jquery Ajax to insert data in database?

Guess what letter conforming each word

Run scheduled task as local user group (not BUILTIN)