Los scripts de Autoconf tienen problemas con un nombre de archivo o ruta de acceso con espacios. Por ejemplo,Variable de shell con espacios, citando para la opción de línea de comando única
./configure CPPFLAGS="-I\"/path with space\""
resultado en (config.log):
configure:3012: gcc -I"/path with space" conftest.c >&5
gcc: with: No such file or directory
gcc: space": No such file or directory
El comando de compilación de ./configure es ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
y no soy capaz de modificar esto (que pude tal vez, pero trabajando alrededor autoconf de esta manera no es una solución general).
Creo que se trata de obtener una variable de shell que contenga espacios para analizar como una sola variable de línea de comandos en lugar de dividirla en espacios. El ejemplo de shell simple que puedo llegar a es crear un archivo con espacios e intentar lista es con ls
con una variable de shell como argumento a ls
:
$ touch "a b"
$ file="a b"
$ ls $file
ls: a: No such file or directory
ls: b: No such file or directory
Esto funciona, pero es ilegal ya que en autoconf I no puede modificar el código shell:
$ ls "$file"
a b
Ninguno de los siguientes intentos de citar cosas funcionan:
$ file="\"a \"b"; ls $file
ls: "a: No such file or directory
ls: b": No such file or directory
$ file="a\ b"
$ file="a\\ b"
$ file="`echo \\"a b\\"`"
y así sucesivamente.
¿Es esto imposible de lograr en los scripts de shell? ¿Existe un presupuesto mágico que expanda una variable de shell con espacios en un solo argumento de línea de comando?
Establecería IFS en una cadena nula; Funciona igual de bien. 'saveIFS =" $ IFS "; IFS = ''; ls $ archivo; IFS = "$ saveIFS" ' –