스크립트를 사용하여 일부 패키지를 구성하려고 하므로 다음과 같은 문제가 발생합니다. 환경 변수가 PREFIX
소프트웨어를 설치할 위치로 설정되어 있다고 가정해 보겠습니다. 내 스크립트 안에는
CONFOPTS="--enable-shared --with-blas=\"-L${PREFIX}/lib/ -lblas\" --with-lapack=\"-L${PREFIX}/lib -llapack\""
echo CONFOPTS=$CONFOPTS
인쇄
CONFOPTS=--enable-shared --with-blas="-L/scratch/test/lib/ -lblas" --with-lapack="-L/scratch/test/lib -llapack"
나중에 스크립트에서 구성을 실행하려는 경우
set -x
./configure --prefix=${PREFIX} ${CONFOPTS}
set +x
그것은 확장된다
./configure --prefix=/scratch/test --enable-shared '--with-blas="-L/scratch/test/lib/' '-lblas"' '--with-lapack="-L/scratch/test/lib' '-llapack"'
이것은 쓰레기이며 구성 스크립트와 쉘에 의해 오해됩니다. 올바른 것은
./configure --prefix=/scratch/test --enable-shared --with-blas="-L/scratch/test/lib/ -lblas" --with-lapack="-L/scratch/test/lib -llapack"
구성 호출에서 올바른 명령줄을 얻을 수 있도록 동작을 어떻게 변경할 수 있습니까?
답변1
옵션을 배열에 넣은 다음 참조할 수 있습니다.
declare -a CONFOPTS
CONFOPTS=(
'--enable-shared'
"--with-blas=-L${PREFIX}/lib/ -lblas"
"--with-lapack=-L${PREFIX}/lib -llapack"
)
./configure --prefix="${PREFIX}" "${CONFOPTS[@]}"
옵션을 올바르게 구분했는지 잘 모르겠습니다. 조정하는 데 도움이 필요하면 알려주시기 바랍니다.
이러한 큰따옴표를 유지하고 전달해야 하는 경우 configure
다음을 시도하십시오.
declare -a CONFOPTS
CONFOPTS=(
'--enable-shared'
'--with-blas="-L${PREFIX}/lib/ -lblas"'
'--with-lapack="-L${PREFIX}/lib -llapack"'
)
./configure --prefix="${PREFIX}" "${CONFOPTS[@]}"
이것도? :
declare -a CONFOPTS
CONFOPTS=(
'--enable-shared'
"--with-blas=\"-L${PREFIX}/lib/ -lblas\""
"--with-lapack=\"-L${PREFIX}/lib -llapack\""
)
./configure --prefix="${PREFIX}" "${CONFOPTS[@]}"