最初に次の行があるとしましょう~/.bash_profile
。
echo "*** THIS IS ~/.bash_profile RUNNING ***"
Linuxシステム(Ubuntu 14.04)では、以下を使用して起動bash
時にロードされたファイルを確認できますstrace
。
strace -f bash --login 2>&1 | tee /tmp/log.strace
# type [ENTER] here, or "hello" [ENTER], then Ctrl+C to exit
grep 'bash_' /tmp/log.strace
結果は予想通りです。
faccessat(AT_FDCWD, "/etc/profile.d/bash_completion.sh", R_OK) = 0 open("/etc/profile.d/bash_completion.sh", O_RDONLY) = 3 open("~/.bash_profile", O_RDONLY) = 3 read(3, "echo \"*** THIS IS ~/.bash_profil"..., 48) = 48 write(1, "*** THIS IS ~/.bash_profile RUNN"..., 40*** THIS IS ~/.bash_profile RUNNING ***
しかし、私はこれを通してOSX 10.9コンピュータにログインし、ssh
同じことをする必要があります。 OSXでは使用できないため、次のようにstrace
使用しました。dtruss
dtruss -f bash --login 2>&1 | tee /tmp/log.dtruss
# type [ENTER] here, or "hello" [ENTER], then Ctrl+C to exit
grep 'bash_' /tmp/log.dtruss
~/.bash_profile
奇妙なことにロードされたことがあるという言及はないようです。
$ grep 'bash_' /tmp/log.dtruss $
bash --login
..., - そのOSXシステムで実行すると、上記の内容が印刷されていることがわかりますが、ロードする必要があるというecho
意味ですか?~/.bash_profile
!
もちろん、dtruss
他のファイルへのアクセスを報告するかどうかは次のとおりです。
$ grep 'open\|stat' /tmp/log.dtruss
41819/0xce5a2: stat64("/AppleInternal\0", 0x7FFF5CBC2A88, 0x0) = -1 Err#2
41819/0xce5a2: stat64("/usr/lib/dtrace/libdtrace_dyld.dylib\0", 0x7FFF5CBC23F8, 0x7FFF5CBC3330) = 0 0
41819/0xce5a2: open("/usr/lib/dtrace/libdtrace_dyld.dylib\0", 0x0, 0x0) = 3 0
41819/0xce5a2: stat64("/usr/lib/libncurses.5.4.dylib\0", 0x7FFF5CBC2208, 0x7FFF5CBC30A0) = 0 0
...
41819/0xce5a2: open("/dev/tty\0", 0x6, 0x7FFF79D33940) = 3 0
41819/0xce5a2: open_nocancel("/usr/share/locale/en_US.UTF-8/LC_COLLATE\0", 0x0, 0x1B6) = 3 0
...
41819/0xce5a2: stat64("~/.fastlane/bin/bash\0", 0x7FFF5CBC37E0, 0x0) = -1 Err#2
41819/0xce5a2: stat64("/usr/bin/bash\0", 0x7FFF5CBC37E0, 0x0) = -1 Err#2
41819/0xce5a2: stat64("/bin/bash\0", 0x7FFF5CBC37E0, 0x0) = 0 0
41819/0xce5a2: stat64("/bin/bash\0", 0x7FFF5CBC3820, 0x0) = 0 0
...
$HOME
...たとえば、検索の一部としてそのディレクトリにアクセスしたことがわかります$PATH
(実際にはPATH="~/.fastlane/bin:$PATH"
はい 設定は全く同じです~/.bash_profile
)。
私の質問は - なぜこれが起こるのですか?同様のファイルにアクセスするときに報告するためにdtruss
使用する特別な呼び出しはありますか?それとも、Linuxで許可されているものと同じ種類のファイルオープントレースを~/.bash_profile
実装するには、OSXで別のプログラムを使用する必要がありますか?strace
それとも、OSXで起動されたプロセスがあまりにも異なり、別のプロセスとして実行される前にバックグラウンドでプロセスを「ロード」しますか~/.bash_profile
?bash
bash