如何确定登录时哪个文件调用 bash 命令?

如何确定登录时哪个文件调用 bash 命令?

我是一名使用 Mac OSX El Capitan 的计算机科学专业学生。我的朋友让我的电脑say 'heil hitler'在我登录到终端的新实例时运行。不用说,我需要摆脱它。目前,我已将 /usr/bin/say 重命名为 /usr/bin/0say,以防止它在公共场合运行。我检查了 ~/.bash_profile、~/.bashrc、~/.login、/etc/bashrc。还有其他文件在 bash 登录时自动运行吗?

除此之外,我如何才能找出哪个配置文件实际上调用了给定的命令?

答案1

使用set命令、手册页这里。 具体来说:

  • set -x在执行之前显示扩展后的命令

  • set -v在扩展之前显示读入的命令

例如,set -xv在 ~/.profile 的顶部插入,您将看到终端在该行之后执行的所有操作。您可能想要捕获该输出(或从终端复制粘贴到文本文档中)并执行类似操作,grep -B 4 hitler以便了解它的位置。

答案2

我想到了一些调查技术:

  • 除了您查看过的 shell init 文件之外,还要检查~/.profile~/.bash_login/etc/profile

  • 对于每个用户的 init 文件,请尝试通过重命名来禁用它们;如果删除某个特定文件导致其无法运行say,则说明该文件中存在问题。您还可以return在 init 文件中途放置一个命令,以查看调用say是在该点之前还是之后。

  • 您可以添加set -x一个初始化文件,它会在执行命令时让 shell 打印出命令;使跟踪执行变得简单。

  • 强力搜索你的主文件夹:grep -r hitler ~

答案3

看起来你已经解决了这个问题,但我还是应该检查一下我的终端快捷方式。它可能被任意数量的脚本快捷方式替换,而 AppleScript 是最有可能的,可以执行这个恶作剧。

相关内容