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

标签 macos bash

在 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)。
  • 检查 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/

相关文章:

SwiftSoup 从evaluateJavaScript 解析

python - 如何通过Python在Windows 10上使用Unix?

bash - Docker 在入口点运行脚本

bash - bash 脚本中奇怪的并行执行

arrays - Python 的 all 等价于 bash 的是什么?

ios - 缓存对 NSFetchedResultsController 有什么影响

objective-c - 获取鼠标下的窗口值

macos - 尽管建议修复 Mac OS X Yosemite,但 GIT SSL 错误仍然存​​在

java - ImageIcon 不显示在 java 中

bash - 为什么 bash 中的 ""Here strings"会更改其后任何内容的语法颜色?