-DSYS_BASHRC=を使用してコンパイル中に設定されたシステムrcパスを照会する方法は?

-DSYS_BASHRC=を使用してコンパイル中に設定されたシステムrcパスを照会する方法は?

特定のシステムでbashのコンパイル時オプションを照会する方法は?

Bashのシステムrcパスはシステムによって異なります。時にはそうです/etc/bash.bashrc。時にはそうです/etc/bashrc。プログラムでこれをどのように検出できますか?

シェルにオプションをリストできることがわかります。

set -o

または

shopt

ベストアンサー1

私が知る限り、バッシュソースコードSYS_BASHRC含まれている他のrcファイルは、コンパイル後に区別されません。また、SYS_BASHRC定義されておらず、結果のバイナリがシステムrcをまったく使用しない可能性があります。

ただし、プロセスで使用されるすべてのファイルを見つけることは可能ですstrace。 Bashはインタラクティブに実行されたときにのみrcファイルを含むので、次のようになります。

echo | strace -e openat -o tmp.log bash -i 2>/dev/null

生成されたファイルには必要なtmp.log情報が含まれています。

openat(AT_FDCWD, "/etc/bash.bashrc", O_RDONLY) = 3

残念ながら、これにはライブラリ行(および/ dev / nullにリダイレクト)などの多くの行も含まれます。それぞれの場合に正しい行を選択する方法がわかりません。しかし実際にはおそらく最初の非図書館ではないかと思います/etc/

grep -v O_CLOEXEC tmp.log | grep \"/etc | head -n 1 | sed -e 's/.*"\(.*\)".*/\1/'

おすすめ記事