在shell中打印出当前别名

时间:2017-10-02 02:35:59

标签: shell unix alias

有没有办法从shell脚本打印终端上的当前别名?我知道你可以在命令行中输入alias然后将它们打印出来,但是当我运行脚本时我需要它们打印出来。

1 个答案:

答案 0 :(得分:2)

在Bash中,有一个shell变量BASH_ALIASES,它是一个由别名命名的关联数组,别名为值。您可以打印它们,例如:

for key in "${!BASH_ALIASES[@]}"; do
    printf '%s=%q\n' "$key" "${BASH_ALIASES[$key]}"
done

其中%q格式规范确保引用命令以供重用。

我不确定这是什么时候引入的,因为release notes没有提到它;关联数组需要Bash 4.0或更新版本。

请注意,这是一个shell变量而不是环境变量,因此它在子shell中不可用(例如,以非交互方式运行脚本时)。

但是,您可以执行以下操作,假设您的别名声明位于文件~/.aliases.sh中,包含例如:

alias ll='ls -l'

然后可以执行脚本

source ~/.aliases.sh

for key in "${!BASH_ALIASES[@]}"; do
    printf '%s=%q\n' "$key" "${BASH_ALIASES[$key]}"
done

ll                        # Won't work! "ll: command not found"

shopt -s expand_aliases   # Turn on alias expansion

ll                        # Works!

因此,在获取别名声明后会填充BASH_ALIASES,但在您设置expand_aliases shell选项之前,您无法真正使用它们。