在Bash中是否有办法查看加载了哪些“点文件”,以及它们加载的顺序是什么?
我正在尝试权威地在Mac OS X上找出加载了哪些Bash配置文件以及加载了哪些订单。
答案 0 :(得分:3)
我不知道如何在任何给定的OS X系统上动态确定,而无需任何准备工作。
然而,以准备工作作为选项,Etan Reisner和twalberg在他们的评论中提供了有用的选择:
跟踪创建新shell时bash
打开的文件 - 请参阅下文。
如果您知道候选文件集,请编辑每个文件并在顶部添加echo "Loading file <filename>..."
之类的内容。
man bash
应列出所有候选文件/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
实例。
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