다른 Xresources 파일을 #include할 때 환경 변수를 사용할 수 있나요?

다른 Xresources 파일을 #include할 때 환경 변수를 사용할 수 있나요?

~/.Xresources파일 내에 위치가 환경 변수 값에 따라 달라지는 다른 파일을 포함하고 싶습니다. 가능합니까?

#include "${env_path}/abc/def/Xresources"

확장은 없을 것 같습니다 ${env_path}.

답변1

예, 하지만 직접적으로는 아닙니다.

로드된 도구 .Xresourcesxrdb,옮기다C 전처리기. 그것이 바로 #include지시문의 출처입니다. C 전처리기는 환경 변수에 대한 액세스를 제공하지 않습니다. 전처리기의 출력은 변수 보간과 같은 추가 동적 처리 없이 리소스 목록으로 해석됩니다.

두 가지 해결 방법이 있습니다. 다른 전처리기를 사용하거나 호출 시 변수를 정의하여 xrdb사용하는 것입니다. 어느 쪽이든 xrdb호출 방법을 변경해야 합니다 . xrdbX 세션 시작 스크립트에 명령을 추가하세요.

C 전처리기와 함께 변수를 사용하려면 xrdb명령줄에 변수를 전달하세요.

xrdb -DEXTRA_RESOURCES_FILE="<$env_path/abc/def/Xresources>" -merge ~/.Xresources

파일에서 해당 변수를 사용하십시오.

#include EXTRA_RESOURCES_FILE

전처리기에는 연결 기능은 물론 문자열 처리 기능도 없기 때문에 include 지시문의 기능이 제한됩니다. 전체 파일 이름은 단일 문자열로 지정되어야 합니다. 그리고 xrdb소리 없는 변신인 것 같았는데 "다행히 _나왔네요 <>.

더 많은 유연성을 원한다면 다른 전처리기를 사용할 수 있습니다. 나는 사용한다m4, 이상하고 이상적이지는 않지만 C 전처리기보다 나쁘지는 않습니다. M4에는 실제 문자열 처리 기능이 있으며 다른 파일을 포함할 수 있습니다. 그러나 환경 변수에 직접 액세스할 수는 없습니다. GNU m4를 사용하면 이를 수행할 수 있지만 쉘 이스케이프를 사용해야 합니다. 사용자 지정 호출을 실행하는 경우 xrdb이 시점에서 환경 변수를 전달하는 것이 좋습니다.

xrdb -D"env_path=$env_path" -merge ~/.Xresources

.Xresources파일 에서 :

m4_include(env_path/abc/def/Xresources)

`…'m4는 문자열을 인용하는 데 사용됩니다 . `출력에 a를 포함 하려면 따옴표 문자를 일시적으로 변경해야 합니다.

또는 추가 파일을 포함해야 하는 경우 다음을 실행하세요.

xrdb -merge "$env_path/abc/def/Xresources"

관련 정보