/bin/sh 字符串变量作为多个参数

/bin/sh 字符串变量作为多个参数

我有一个 docker 容器,将 ARG 设置为

CMAKE_ARGS=-DWITH_CPU=arm -DCMAKE_C_FLAGS="-march=armv7-a -mfpu=neon-vfpv4 -mfloat-abi=hard -mvectorize-with-neon-quad" -DCMAKE_CXX_FLAGS="-march=armv7-a -mfpu=neon-vfpv4 -mfloat-abi=hard -mvectorize-with-neon-quad"

然后我想将它们作为命令行参数传递给 cmake

cmake ../. -DCMAKE_INSTALL_LIBDIR=/usr/lib "$CMAKE_ARGS"

然而,它失败了。我怀疑是由于“或空格。

Docker ARG 只能是字符串,docker 使用 /bin/sh (不是 bash)

请帮忙!由于这个原因,目前需要两个单独的 dockerfile :(

我尝试过单引号、转义引号、“$ARG”和$ARG。什么都不起作用。 cmake 要么将 -mvectorize-with-neon-quad 视为参数,要么将 -DWITH_CPU 参数视为整个字符串

答案1

cmake ../. -DCMAKE_INSTALL_LIBDIR=/usr/lib "$CMAKE_ARGS"

cmake使用 的内容作为一个参数进行调用$CMAKE_ARGS,而您似乎需要将-DWITH_CPU=arm,-DCMAKE_C_FLAGS=-march=armv7-a -mfpu=neon-vfpv4 -mfloat-abi=hard -mvectorize-with-neon-quad-DCMAKE_CXX_FLAGS=-march=armv7-a -mfpu=neon-vfpv4 -mfloat-abi=hard -mvectorize-with-neon-quad作为 3 个单独的参数传递给cmake

POSIXsh不支持数组变量。它的变量只能包含一个值。

然而,您可以存储由一个字符分隔的值,您知道这些值不会出现在单词中,并使用 split+glob 运算符(使变量不带引号),禁用您不想再次拆分的 glob 部分

CMAKE_ARGS='-DWITH_CPU=arm|-DCMAKE_C_FLAGS=-march=armv7-a -mfpu=neon-vfpv4 -mfloat-abi=hard -mvectorize-with-neon-quad|-DCMAKE_CXX_FLAGS="-march=armv7-a -mfpu=neon-vfpv4 -mfloat-abi=hard -mvectorize-with-neon-quad'
IFS='|' # split on |
set -o noglob # disable globbing
cmake ../. -DCMAKE_INSTALL_LIBDIR=/usr/lib $CMAKE_ARGS # split+glob

相关内容