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

관련 정보