我正在尝试使用脚本配置一些软件包,因此出现以下问题。假设环境变量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"'
这是垃圾,并且被配置脚本和 shell 误解。正确的应该是
./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[@]}"