缘由:
经常用Linux进行操作的同学一般都会有各种各样的技巧来提升工作效率,而添加/改写shell中的alias无疑是比较常见的一种:通过设置自己惯用的alias可以快速的在Linux命令行中进行操作,减少键盘敲击、提升操作效率。不过,大部分人仅限于在命令行上使用alias,很少有人会在自己写的shell脚本中也使用alias,一方面是因为alias无法通用:不同的人有不同的习惯,并且在实际的生产环境中情况千差万别,alias无法保证脚本的通用性和有效性;另一方面就是——有些人真的不知道怎么在shell脚本中使用alias。而这篇文章主要就是针对不知道怎么在shell脚本中使用alias功能的人所写的。
搜索关键字:
- bash shell alias
- bash expand_aliases
参考解答:
#在使用alias之前添加下面的内容 shopt -s expand_aliases
查看Bash的manual你能找到下面的内容:
Aliases are not expanded when the shell is not interactive, unless the expand_aliases shell option is set using shopt (see the description of shopt under SHELL BUILTIN COMMANDS below).
翻译如下:
在非交互式shell中无法使用alias,除非用shopt命令显示设定expand_aliases选项。
expand_aliases
If set, aliases are expanded as described below under Aliases, Aliases. This option is enabled by default for interactive shells.
因此,将“shopt -s expand_aliases”添加到你的脚本中去,然后记得source(重新加载)你的别名文件/相应脚本:
shopt -s expand_aliases source ~/.bash_aliases
我在前面的一篇文章(Linux中.bashrc和.bash_profile区别)中提到过:~/.bashrc 这个文件一般是由交互式非登录shell调用的,而大部分人一般都是将alias设置在~/.bashrc中的,所以默认情况下是无法在shell脚本中使用alias的;如果你真的需要在以后的shell编程中默认开启alias功能(不建议这样做),可以通过设置BASH_ENV这个环境变量来指定非交互式shell需要调用的文件来实现该目的,虽然我并不建议这样做:
#1.给 ~/.bashrc 添加一行内容用于设置BASH_ENV环境变量 BASH_ENV='~/.non_interactive_shell' #2.设置 ~/.non_interactive_shell 文件内容如下 shopt -s expand_aliases
参考链接:
- http://tldp.org/LDP/abs/html/aliases.html #不错
- http://www.gnu.org/software/bash/manual/html_node/Aliases.html #官方说明
- http://stackoverflow.com/questions/1615877/why-aliases-in-a-non-interactive-bash-shell-do-not-work #给力
- http://unix.stackexchange.com/questions/1496/why-doesnt-my-bash-script-recognize-aliases #给力
- https://www.shell-tips.com/2007/08/25/working-with-bash-aliases-aliasunalias/
- http://fog.ccsf.edu/~gboyd/cs160b/online/8-advanced/shopt.html
- http://askubuntu.com/questions/98782/how-to-run-an-alias-in-a-shell-script
- http://stackoverflow.com/questions/15968053/using-alias-in-shell-script
- http://superuser.com/questions/422122/bash-ls-options-group-directories-first
=EOF=
《 “在shell脚本中使用alias别名” 》 有 2 条评论
真的很有用,解决了我的疑惑,搜索了好多文章,这篇帮助解决了问题。赞
很高兴能帮助解决你的问题,同时也欢迎一起交流学习。