在 Bash 中有没有办法查看加载了哪些“点文件”,以及它们以什么顺序加载?
我试图权威地找出在 Mac OS X 上加载了哪些 Bash 配置文件,以及它们的加载顺序。
最佳答案
如果没有任何准备工作,我不知道如何在任何给定的 OS X 系统上动态确定它。
但是,准备工作作为一个选项,Etan Reisner 和 twalberg 在他们的评论中提供了有用的选项:
跟踪
bash
的文件创建新外壳时打开 - 见下文。如果您知道候选文件集,请编辑每个文件并放入类似
echo "Loading file <filename>..."
的内容在顶部。-
man bash
应列出所有候选文件 - 这种方法的缺点是,除了麻烦之外,您还必须手动扫描这些文件的内容,以查看它们是否加载了其他文件(等等,传递性);例如,标准配置文件中的特定代码
/etc/profile
在 OS X 上加载非标准文件/etc/bashrc
,然后(自 OS X 10.11 起)加载/etc/bashrc_Apple_Terminal
.
-
跟踪 bash
打开的文件启动时的外壳:
opensnoop
是围绕 dtrace
utility 的 shell 脚本包装器OS X 附带的,您可以按如下方式使用:
警告(向4ae1e1 致敬):随着SIP (System Integrity Protection) 的引入在 OS X 10.11 中, opensnoop
不再适用于系统位置的可执行文件,例如 /bin/
, /sbin/
和 /usr/bin
, 其中包括 bash
.
DTrace - 因此 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
实例。- OS X 10.11+(SIP 解决方法):
- 忽略
invalid user access in action ...
您最初看到的错误消息。 - 假设您已经(暂时)复制了您的
bash
可执行到/bin/
以外的位置,/sbin/
或/usr/bin
- 例如~
- 用~/bash -l
启动它,它模拟了如何Terminal.app
创建一个新实例(它创建一个交互式登录 shell)。
- 忽略
- OS X 10.11+(SIP 解决方法):
- 检查
opensnoop
的输出命令:- 幸运的是,它甚至显示不成功 打开文件的尝试 - 由值
-1
表示在FD
列,告诉您哪些文件bash
尝试打开,以什么顺序打开;请注意,在~/.bash_profile
的情况下,~/.bash_login
和~/.profile
三驾马车只打开实际存在的第一个。
- 幸运的是,它甚至显示不成功 打开文件的尝试 - 由值
原始 OS X 10.10 系统的示例输出:
UID PID COMM FD PATH
501 5110 bash 3 /dev/dtracehelper
501 5110 bash 3 /dev/tty
501 5110 bash 3 /usr/share/locale/en_US.UTF-8/LC_COLLATE
501 5110 bash 3 /usr/share/locale/en_US.UTF-8/LC_CTYPE
501 5110 bash 3 /usr/share/locale/en_US.UTF-8/LC_MONETARY
501 5110 bash 3 /usr/share/locale/en_US.UTF-8/LC_NUMERIC
501 5110 bash 3 /usr/share/locale/en_US.UTF-8/LC_TIME
501 5110 bash 3 /usr/share/locale/en_US.UTF-8/LC_MESSAGES/LC_MESSAGES
501 5110 bash -1 /etc/.mdns_debug
501 5110 bash 3 /etc/profile
501 5110 bash 3 /etc/bashrc
501 5110 bash -1 /Users/jdoe/.bash_profile
501 5110 bash -1 /Users/jdoe/.bash_login
501 5110 bash -1 /Users/jdoe/.profile
501 5110 bash 3 /Users/jdoe/.bash_history
501 5110 bash 3 /Users/jdoe/.bash_history
501 5110 bash 3 /usr/share/terminfo/78/xterm-256color
关于macos - 查看加载了哪些 Bash 配置文件脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33807334/