소스 코드에서 일부 소프트웨어를 구축하려면 많은 구성 스위치가 필요합니다.
./configure --enable-ftp --with-gettext ...
원하는 모든 스위치가 줄 바꿈으로 구분된 텍스트 파일에 있습니다. 예를 들면 다음과 같습니다.
--enable-ftp
--with-gettext
etc...
옵션을 설정하기 위해 텍스트 파일을 구성에 대한 매개변수로 전달할 수 있는 방법이 있습니까? 아니면 내가 가지고 있는 옵션을 잘라내어 붙여넣는 다른 방법이 있나요?
편집하다
$HOME
저는 스위치에 변수를 사용하고 있으므로 모든 솔루션이 이를 수용해야 합니다.
답변1
$HOME
파일을 확장 하려면 envsubst
먼저 사용할 수 있습니다(이렇게 하면 모든 환경 변수가 확장됩니다). 그런 다음 결과를 배열로 읽을 수 있습니다.zsh
args=(${(f)"$(< <(envsubst <infile))"})
또는bash
readarray -t args < <(envsubst <infile)
그런 다음 실행
./configure "${args[@]}"
또는 tr
앞에 한 줄 옵션을 사용하여 결과 형식을 지정 ./configure
하고 다음으로 파이프 할 수 있습니다 sh
.
{ printf %s './configure '; tr '\n' ' ' <infile; } | sh
답변2
xargs
한 가지 방법은 stdin의 공백으로 구분된 문자열을 명령줄 인수로 변환하는 를 사용하는 것입니다 . 파일 이름이 switches
다음과 같은 경우:
xargs ./configure < switches
*
이것은 또는 같은 것을 확장하지 않습니다 $VAR
. (편집에서와 같이) 이를 확장하려는 경우 몇 가지 방법이 있습니다. 간단히 명령을 생성하고 전달할 수 있습니다 sh
.
xargs printf '%s ' ./configure < switches | sh
또는 가 있는 경우 envsubst
변수( 와 같은 ${HOME}
)는 확장되지만 파일 전역 변수( *
)는 확장되지 않습니다.
envsubst < switches | xargs ./configure