我知道要列出给定 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_alias
BASE_ALIAS
答案2
您可以通过以下方法来做到这一点:
comm -2 -3 --nocheck-order <(alias -p) <(bash -l -c 'alias -p')
这是通过将当前别名列表与全新 shell 中存在的别名进行比较来实现的。
该comm
实用程序用于仅显示第一个命令中出现的行<(alias -p)
。有--nocheck-order
必要防止它抱怨别名列表不按顺序,即使它确实是...