有没有办法从shell脚本打印终端上的当前别名?我知道你可以在命令行中输入alias
然后将它们打印出来,但是当我运行脚本时我需要它们打印出来。
答案 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选项之前,您无法真正使用它们。