如何找到流氓别名声明?

38 bash alias bashrc

我正在尝试查找alias已声明特定内容的位置。我已经搜索了所有我知道的常见位置来寻找别名:

  • ~/.bashrc
  • ~/.bash_profile
  • /etc/bashrc
  • /etc/配置文件

没有运气。

我知道这是alias因为当我这样做时which COMMAND,我得到:

alias COMMAND='/path/to/command'
    /path/to/command
Run Code Online (Sandbox Code Playgroud)

有没有办法找到哪个文件声明alias只知道alias名称?

uto*_*und 32

我会寻找/etc/profile.d/冒犯的alias

您还可以执行以下操作来找到它:

grep -r '^alias COMMAND' /etc
Run Code Online (Sandbox Code Playgroud)

这将grep通过文件递归查找以alias COMMAND.

如果一切都失败了,把它放在你的最后 ~/.bashrc

unalias COMMAND
Run Code Online (Sandbox Code Playgroud)


Mik*_*kel 28

您可以尝试以下几点:

  1. 用于bash -v查看 shell 启动期间正在读取哪些行
  2. 用于bash -x查看 shell 启动期间正在运行的命令
  3. 只用一个启动文件运行

bash -v

-v 选项bash在读取时打印它读取的每个脚本文件中的每一行。

从跑步开始

bash -i -v >bash-i.out 2>&1
Run Code Online (Sandbox Code Playgroud)

等待 5-10 秒,然后按Ctrl+C

这将为您提供一个名为的单个文件bash-i.out,就像您所有的启动文件合并(或连接)在一起一样。

然后使用less打开文件并使用 搜索别名/aliasname

现在,比较该别名相对于文件中其他行的出现位置。例如,在大多数系统上,/etc/bash.bashrc顶部有一条评论,上面写着/etc/bash.bashrc并且~/.bashrc也有一个。

如果它在你的顶部之上~/.bashrc,那么它可能是一个/etc定义别名的启动文件,否则它在你的~/.bashrc或它包含的文件中,通过source.(点命令)。

如果那没有显示别名,请尝试

bash -l -v >bash-l.out 2>&1
Run Code Online (Sandbox Code Playgroud)

这告诉 bash 是一个登录 shell,它读取一些不同的启动文件,例如/etc/profileand~/.bash_profile而不是/etc/bash.bashrcand ~/.bashrc

bash -x

如果bash -v没有给您明确的答案,请尝试 running bash -x,它会打印 shell 正在运行的命令,而不是 shell 正在读取的行。

方法与上述基本相同,只是-v改为-x。(如有必要,您可以同时使用两者。)

仅使用一个启动文件运行

bash -i --rcfile="$HOME/.bashrc"
Run Code Online (Sandbox Code Playgroud)

看看你有没有别名。

如果您的系统有rcfileset to,请尝试相同的设置/etc/bash.bashrc

然后试试

bash -l --rcfile="$HOME/.bash_profile"
Run Code Online (Sandbox Code Playgroud)

并对profile名称中包含的每个 bash 启动文件执行相同操作,例如更改$HOME/.bash_profile/etc/profile.

无论哪种方式使别名出现,都会告诉您应该开始查看的文件。