如何在 OS X 中显示加载的 shell 文件?
How show loaded shell files in OS X?
就像下面的命令在 Linux 上一样有效,有办法在 shell 中显示加载的文件吗?
echo exit | strace bash -li |& less | grep '^open'
输出为:
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libtinfo.so.5", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/dev/tty", O_RDWR|O_NONBLOCK) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
open("/proc/meminfo", O_RDONLY|O_CLOEXEC) = 3
open("/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 3
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
...
在 macOS 上,您可以使用这组略有不同的命令:
sudo bash -c "echo exit | dtruss bash -li 2>&1 | less | grep '^open'"
或者,如果您有 bash 版本 4 或 5:
sudo bash -c "echo exit | dtruss bash -li |& less | grep '^open'"
(如评论部分所述there)
注:
|&
是 2>&1 |
的 shorthand,在 macOS 附带的 bash 3.x 上不可用(它需要 bash >= 4).它的目的是将标准输出和标准错误都重定向到管道之后的下一个命令的输入。
macOS
dtruss
的杠杆作用与 linux 上的 strace
相同:
$ sudo dtruss -t open -n bash
虽然输出可能与您的问题最相似,但输出存在一些差异。
PID/THRD SYSCALL(args) = return
9658/0x130527a: open("/dev/tty[=11=]", 0x6, 0xFFFFFFFF8ED3D6B8) = 3 0
9658/0x130527a: open("script.sh[=11=]", 0x0, 0x0) = 3 0
...
"open" 的其他 SYSCALL
个参数包括 open_nocancel
和 open_extended
。
dtruss -h will give you a complete set of options.
就像下面的命令在 Linux 上一样有效,有办法在 shell 中显示加载的文件吗?
echo exit | strace bash -li |& less | grep '^open'
输出为:
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libtinfo.so.5", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/dev/tty", O_RDWR|O_NONBLOCK) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
open("/proc/meminfo", O_RDONLY|O_CLOEXEC) = 3
open("/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 3
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
...
在 macOS 上,您可以使用这组略有不同的命令:
sudo bash -c "echo exit | dtruss bash -li 2>&1 | less | grep '^open'"
或者,如果您有 bash 版本 4 或 5:
sudo bash -c "echo exit | dtruss bash -li |& less | grep '^open'"
(如评论部分所述there)
注:
|&
是 2>&1 |
的 shorthand,在 macOS 附带的 bash 3.x 上不可用(它需要 bash >= 4).它的目的是将标准输出和标准错误都重定向到管道之后的下一个命令的输入。
macOS
dtruss
的杠杆作用与 linux 上的 strace
相同:
$ sudo dtruss -t open -n bash
虽然输出可能与您的问题最相似,但输出存在一些差异。
PID/THRD SYSCALL(args) = return
9658/0x130527a: open("/dev/tty[=11=]", 0x6, 0xFFFFFFFF8ED3D6B8) = 3 0
9658/0x130527a: open("script.sh[=11=]", 0x0, 0x0) = 3 0
...
"open" 的其他 SYSCALL
个参数包括 open_nocancel
和 open_extended
。
dtruss -h will give you a complete set of options.