如何使用 -DSYS_BASHRC= 查询编译时设置的系统 rc 路径?

如何使用 -DSYS_BASHRC= 查询编译时设置的系统 rc 路径?

如何查询给定系统上 bash 的编译时选项?

bash 的系统 rc 路径因系统而异。有时是/etc/bash.bashrc,有时是/etc/bashrc。我如何以编程方式检测到这一点?

我知道我可以在 shell 中列出选项:

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/'

相关内容