相关阅读
Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm=1001.2014.3001.5482
在Linux中alias命令用于为一串字符(常代表命令)设置一个别名,该别名在Bash读取并解析一行命令时会被展开。
下面是该命令的语法与选项的解释。
用法
alias [-p] ([name[=value]])*
选项:
-p 指定该选项会打印出当前进程的所有别名
许多Linux发行版会有默认别名设置,它们是通过Bash配置文件完成的。直接使用alias而不添加name参数会导致和使用-p选项一样的结果,即打印出当前进程的所有别名。
[***@EDA ~]$ alias
alias dc='dc_shell'
alias dv='design_vision'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias fm='formality'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias lmd=' lmdown -c /opt/Synopsys/SCL_2018/scl/2018.06/admin/license/license.dat'
alias lmg=' lmgrd -c /opt/Synopsys/SCL_2018/scl/2018.06/admin/license/license.dat -l /opt/Synopsys-2018/SCL_2018/scl/2018.06/admin/logs/debug.log '
alias ls='ls --color=auto'
alias pt='primetime'
alias starrc='StarXtract'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
一条命令的第一个word(通常是命令名)在Bash读取一行命令后会被检测是否为别名,如是,则会进行别名替换,由于该替换是在Bash读取一行命令后立刻执行的,所以同一行命令中前面的alias设置的别名无法立刻在该行后直接使用。
[***@EDA ~]$ alias aa='echo 1';aa
bash: aa: command not found...
[***@EDA ~]$ alias
alias aa='echo 1'
alias dc='dc_shell'
alias dv='design_vision'
*****
[***@EDA ~]$ aa
1
这与变量替换不同,变量替换是在命令执行前进行的,晚于别名替换。
[***@EDA ~]$ a=1;echo $a
1
如果alias设置的别名值后有空格,则在解析时,在该条命令的第一个别名被替换后,后一个word也会被检测是否为别名。
[***@EDA ~]$ alias bb='echo 2 ' #value中留有空格
[***@EDA ~]$ alias cc='3' #value中留有空格
[***@EDA ~]$ alias
alias aa='echo 1'
alias bb='echo 2 ' #注意末尾有空格
alias cc='3'
alias dc='dc_shell'
alias dv='design_vision'
*****
[***@EDA ~]$ bb cc #bb和cc都会被检测是否是别名,被替换成echo 2 3
2 3
别名无法像环境变量那样被子进程继承,因此一般会在配置文件中设置别名。
[***@EDA ~]$ alias ddd='echo This is alias in Bash' #在当前进程创建一个别名
[***@EDA ~]$ ddd
This is alias in Bash
[***@EDA ~]$ bash #在当前进程运行另一个bash子进程
[***@EDA ~]$ ddd #无法使用别名替换
bash: ddd: command not found...
Similar command is: 'dd'
[***@EDA ~]$ exit #回到一开始的bash进程
[***@EDA ~]$ ddd #可以使用别名
This is alias in Bash
别名不会递归替换,一旦别名替换后,其替换后的内容就不会被检测是否是别名。
[***@EDA ~]$ alias echo='echo 1' #别名替换值中又有别名
[***@EDA ~]$ echo #不会递归替换
1
在非交互式的Bash脚本中,别名替换默认被关闭了,除非在脚本中使用shopt命令开启expand_aliases选项。
scripts文件
#!/bin/bash#未启用别名展开
#shopt -s expand_aliases
alias tt='echo 111' # 定义别名
tt # 使用别名[***@EDA ~]$ ./scripts
./script: line 8: tt: command not foundscripts文件
#!/bin/bash#启用别名展开
shopt -s expand_aliases
alias tt='echo 111' # 定义别名
tt # 使用别名[***@EDA ~]$ ./scripts
111