![다른 Xresources 파일을 #include할 때 환경 변수를 사용할 수 있나요?](https://linux55.com/image/106308/%EB%8B%A4%EB%A5%B8%20Xresources%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%23include%ED%95%A0%20%EB%95%8C%20%ED%99%98%EA%B2%BD%20%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%82%98%EC%9A%94%3F.png)
내 ~/.Xresources
파일 내에 위치가 환경 변수 값에 따라 달라지는 다른 파일을 포함하고 싶습니다. 가능합니까?
#include "${env_path}/abc/def/Xresources"
확장은 없을 것 같습니다 ${env_path}
.
답변1
예, 하지만 직접적으로는 아닙니다.
로드된 도구 .Xresources
는xrdb
,옮기다C 전처리기. 그것이 바로 #include
지시문의 출처입니다. C 전처리기는 환경 변수에 대한 액세스를 제공하지 않습니다. 전처리기의 출력은 변수 보간과 같은 추가 동적 처리 없이 리소스 목록으로 해석됩니다.
두 가지 해결 방법이 있습니다. 다른 전처리기를 사용하거나 호출 시 변수를 정의하여 xrdb
사용하는 것입니다. 어느 쪽이든 xrdb
호출 방법을 변경해야 합니다 . xrdb
X 세션 시작 스크립트에 명령을 추가하세요.
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"