특정 시스템에서 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/'