Linux:设置别名命令alias

本文详细介绍了Linux中alias命令的用法、选项、别名的检测机制、与变量替换的区别、别名的继承性以及在非交互式脚本中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相关阅读

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选项一样的结果,即打印出当前进程的所有别名(顺带一提,使用unalias命令,可以取消别名)。

[***@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 found

scripts文件
#!/bin/bash

#启用别名展开
shopt -s expand_aliases
alias tt='echo 111' # 定义别名
tt # 使用别名

[***@EDA ~]$ ./scripts
111

        如何绕过alias别名替换?下面有几种方法。

1、使用反斜杠转义命令的任意一个字符

\aa         # 不会执行别名替换
a\a         # 不会执行别名替换

2、使用单引号或双引号

"aa"         # 不会执行别名替换
'aa'         # 不会执行别名替换

3、使用command内建命令

command aa

 4、使用完整路径

/home/***/aa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

日晨难再

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值