スクリプトを使用して一部のパッケージを構成しようとすると、次の問題が発生します。環境変数が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[@]}"