查看加载了哪些Bash配置文件脚本

时间:2015-11-19 15:00:30

标签: macos bash

在Bash中是否有办法查看加载了哪些“点文件”,以及它们加载的顺序是什么?

我正在尝试权威地在Mac OS X上找出加载了哪些Bash配置文件以及加载了哪些订单。

1 个答案:

答案 0 :(得分:3)

我不知道如何在任何给定的OS X系统上动态确定,而无需任何准备工作

然而,准备工作作为选项,Etan Reisner和twalberg在他们的评论中提供了有用的选择:

  • 跟踪创建新shell时bash打开的文件 - 请参阅下文。

  • 如果您知道候选文件集,请编辑每个文件并在顶部添加echo "Loading file <filename>..."之类的内容。

    • man bash应列出所有候选文件
    • 除了繁琐之外,这种方法的缺点是您还必须手动扫描这些文件的内容,看看它们是否加载其他文件(等等,传递);例如,OS X上标准配置文件/etc/profile中的特定代码加载非标准文件/etc/bashrc,而后者(因为OS X 10.11)加载/etc/bashrc_Apple_Terminal

在启动期间跟踪bash shell打开的文件:

opensnoop是围绕OS X附带的dtrace utility的shell脚本包装器,您可以按如下方式使用:

警告(对4ae1e1的提示):在 OS X 10.11 中引入SIP (System Integrity Protection) {{ 1}}不再适用于系统位置中的可执行文件,例如opensnoop/bin//sbin/,其中包括/usr/bin
DTrace - 因此bash - 可以在这些位置工作,但只有当您启动到恢复分区时,请选择opensnoop,并执行
Utilities > Terminal那里;但请注意,您将收到以下可疑警告csrutil enable --without dtrace
实用的解决方法csrutil: requesting an unsupported configuration. This is likely to break in the future and leave your machine in an unknown state.复制到特定于用户的位置并从那里执行 - 请参阅下文。

  • 在现有的终端窗口中运行/bin/bash
  • 打开一个新的终端窗口,启动另一个sudo opensnoop -n bash实例。
    • OS X 10.11 + (SIP解决方法):
      • 忽略您最初看到的bash错误消息。
      • 假设您(暂时)将invalid user access in action ...可执行文件复制到bash/bin//sbin/以外的位置 - 例如/usr/bin } - 使用~启动它,它模拟~/bash -l创建新实例的方式(它创建一个交互式登录 shell)。
  • 检查Terminal.app命令的输出:
    • 幸运的是,它甚至显示不成功的尝试打开文件 - 由opensnoop列中的值-1表示,该列告诉您哪些文件FD 尝试打开,以什么顺序打开;请注意,对于bash~/.bash_profile~/.bash_login三驾马车,仅打开实际存在的第一个

原始OS X 10.10系统的示例输出:

~/.profile