仅列出 bash 中的临时别名

仅列出 bash 中的临时别名

我知道要列出给定 bash 会话中的所有别名alias -p。有没有办法获取给定 bash 会话中所有临时别名的列表,即不在我的 bash 配置文件中的所有别名?

谢谢!

答案1

事情没那么简单。 bash 中没有“临时”别名的概念,对于 bash 来说,通过 source .bashrc 执行的任何命令都与您在命令行中键入的任何命令相同。此外,bash 配置文件只能在某些情况下定义某些别名。

您可以将执行 bash 配置文件后设置的别名保存到变量(或文件)中,然后在需要时检查该变量与当前设置的别名之间的差异:

$ BASE_ALIAS="$(alias | sort)"
$ alias tmp_alias=""
$ unalias ls
$ diff <( echo "$BASE_ALIAS" ) <( alias | sort )
3d2
< alias ls='ls --color=auto'
5a5
> alias tmp_alias=''

diff显示自声明以来别名ls已被删除并添加了别名。tmp_aliasBASE_ALIAS

答案2

您可以通过以下方法来做到这一点:

comm -2 -3 --nocheck-order <(alias -p) <(bash -l -c 'alias -p')

这是通过将当前别名列表与全新 shell 中存在的别名进行比较来实现的。
comm实用程序用于仅显示第一个命令中出现的行<(alias -p)。有--nocheck-order必要防止它抱怨别名列表不按顺序,即使它确实是...

相关内容