在shell脚本中使用alias别名


缘由:

经常用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
参考链接:

=EOF=

, ,

《 “在shell脚本中使用alias别名” 》 有 2 条评论

  1. 真的很有用,解决了我的疑惑,搜索了好多文章,这篇帮助解决了问题。赞

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注