在shell脚本中使用系统 alias - xspace

原文:在shell脚本中使用alias,有改动。

Linux shell有交互式与非交互式两种工作模式。我们日常使用shell输入命令得到结果的方式是交互式的方式,而shell脚本使用的是非交互式方式。

shell提供了alias功能来简化我们的日常操作,使得我们可以为一个复杂的命令取一个简单的名字,从而提高我们的工作效率。在交互式模式下,shell的alias扩展功能是打开的,因此我们可以键入自己定义的alias别名来执行对应的命令。

但是,在非交互式模式下alias扩展功能默认是关闭的,此时仍然可以定义alias别名,但是shell不会将alias别名扩展成对应的命令,而是将alias别名本身当作命令执行,如果shell内置命令和PATH中均没有与alias别名同名的命令,则shell会“抱怨”找不到指定的命令。

那么,有没有办法在非交互式模式下启用alias扩展呢?答案是使用shell内置命令shopt命令来开启alias扩展选项。shopt是shell的内置命令,可以控制shell功能选项的开启和关闭,从而控制shell的行为。shopt的使用方式如下:

shopt -s opt_name         Enable (``set``) opt_name.
shopt -u opt_name         Disable (``unset``) opt_name.
shopt opt_name          Show current status of opt_name.

alias扩展功能的选项名称是expand_aliases,我们可以在交互式模式下查看此选项是否开启:

sw@gentoo ~ $ shopt expand_aliases
expand_aliases on
sw@gentoo ~ $

在非交互式模式下alias扩展功能默认是关闭的,但是我们可以用shopt来将其开启。

如果我们要让执行shell脚本的子shell读取.bashrc的话,有两种方式可以达到这样的效果

  1. 给shell脚本第一行的解释器加上参数

    #!/bin/bash --login
    
  2. 在脚本中主动source ~/.bashrc


比较kube-proxy模式 iptables或IPVS? - tigera 如何获取容器的 pid 信息