首先使用以下命令

首先使用以下命令

别名,例如ll使用命令定义的别名alias

type ll我可以用诸如which prints之类的东西检查命令

ll is aliased to `ls -l --color=auto'

command -v ll哪个打印

alias ll='ls -l --color=auto'

或者alias ll也打印

alias ll='ls -l --color=auto'

但我似乎找不到在哪里别名已定义,即一个文件,例如.bashrc,或者可能在运行的 shell 中手动定义。目前我不确定这是否可能。

我是否应该简单地浏览加载的所有文件bash并检查每一个文件?

答案1

尽管要求 shell 显示它正在做什么,但手动定义将很难被发现(也许是历史日志),然后grep应该帮助找到 rc 文件中设置的那些:

bash -ixlc : 2>&1 | grep ...
zsh -ixc : 2>&1 | grep ...

如果 shell 没有通过上述调用之一(交互运行 null 命令)精确捕获必要的选项,则script

script somethingtogrep thatstrangeshell -x
...
grep ... somethingtogrep

另一种选择是使用类似stracesysdig查找全部shell 接触的文件,然后手动访问grep这些文件(如果 shell 或程序没有-x标志,则很方便);标准 RC 文件不足以进行手动文件名检查,如果像 oh-my-zsh 或特定于站点的配置之类的东西从谁知道哪里提取代码(或者也可能存在环境变量,正如 sorontar 在他们的答案中指出的那样) 。

答案2

首先使用以下命令

列出所有函数

functions 

列出所有别名

alias 

如果您没有找到别名或函数,请考虑更积极的搜索方法

bash版本

bash -ixlc : 2>&1 | grep thingToSearchHere

Zsh版本

zsh -ixc : 2>&1 | grep thingToSearchHere

选项简要说明

-i     Force shell to be interactive.

-c     Take the first argument as a command to execute

-x      -- equivalent to --xtrace

-l      Make bash act as if invoked as a login shell

答案3

这是我觉得grep -rl非常有用的地方:

这个命令

grep -rl alias ~/.bash* ~/.profile /etc/profile /etc/bash.bashrc

会告诉您在哪个文件中alias使用了该单词。

如果它存在的话,它很可能就在~/.bashrc,并且肯定在~/.bash_aliases


然而,不可能绝对确定该搜索涵盖了所有选项。这些文件还可以调用或加载文件系统中其他任何位置的文件。 ENV 等环境变量$BASH_ENV可能会指示 bash 加载其他一些文件。

在环境中查找变量 BASH_ENV,如果它出现在那里,则扩展它的值,并使用扩展后的值作为要读取和执行的文件的名称。

甚至可以通过设置变量来定义别名(重点是我的):

BASH_ALIASES
一个关联数组变量,其成员对应于由内置别名维护的别名内部列表。添加到此数组的元素出现在别名列表中

答案4

我不知道如何实际列出别名的来源,但由于看起来您正在使用 bash,我认为这些是可能的源文件:

/etc/profile
~/.profile
/etc/bash.bashrc
~/.bash_profile
~/.bashrc

您应该能够通过这些来查找别名,例如grep 'ls -l --color=auto' /etc/profile ~/.profile /etc/bash.bashrc ~/.bash_profile ~/.bashrc

相关内容