特定のシステムで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/'