如何检查别名是否没有替换实际命令?

如何检查别名是否没有替换实际命令?

我如何知道我在 中创建的别名.bash_aliases是否替换了同名的实际命令?我不想意外地做这样的事情。

(我查看了“可能已经有答案的问题”和“类似问题”,但没有看到匹配项)

我之所以询问是因为我觉得系统(Ubuntu 13.10)没有给出警告。

答案1

您可以type在终端中使用它。

假设你有一个命令rm作为 alias rm -i。如果你检查,

type rm

你会得到,

rm is aliased to `rm -i'

如果你没有任何别名,rm你将获得,

rm is /bin/rm

答案2

警告:此方法要求您实际运行命令,而不像其他答案那样“报告”shell 状态。在执行之前您永远无法确定,不是吗?

在你的 shell 中输入

set -x

在 shell 执行时,您将看到+ ...以下行。例如,当我运行ls(通常ls --color=auto在 Ubuntu 上别名为 )时,我得到以下内容:

$ ls ~
+ ls --color=auto /home/rctay
bin         ext    foo.py      Music     shared     tmp-www                tmux-client-32280.log
...

要关闭它,请运行set +x

答案3

在为某个命令定义别名之前,调用它,并在命令名上fn运行:type

type fn

如果没有该名称的命令,type将返回not found

定义别名后,您可以使用locate它来检查可能存在的冲突:

locate '*bin/fn'

这将在系统的任何位置查找目录中指定的命令,该目录的名称表明它是可执行文件。请注意,这与因为将在可能不位于默认路径上的目录中查找fn不同。typelocatebin

相关内容