Gli script di Autoconf hanno problemi con un nome file o percorso con spazi. Ad esempio,Variabile di shell con spazi, che indica un'opzione di riga di comando singola
./configure CPPFLAGS="-I\"/path with space\""
risultati in (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
Il comando di compilazione da ./configure è ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
e io non sono in grado di modificare questo (ho potuto, forse, ma di lavoro intorno autoconf in questo modo non è una soluzione generale).
Penso che si tratti di ottenere una variabile di shell che contenga spazi da analizzare come una singola variabile da riga di comando anziché dividere gli spazi. L'esempio più semplice guscio posso venire in mente è di creare un file con gli spazi e si tenta di lista è con ls
con una variabile di shell come argomento per ls
:
$ touch "a b"
$ file="a b"
$ ls $file
ls: a: No such file or directory
ls: b: No such file or directory
Questo funziona, ma è illegale poiché in autoconf I non può modificare il codice shell:
$ ls "$file"
a b
Nessuno dei seguenti tentativi di citare le cose funzionano:
$ 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\\"`"
e così via.
È impossibile eseguire gli script di shell? C'è una citazione magica che espanderà una variabile di shell con spazi in un singolo argomento della riga di comando?
Imposterei IFS su una stringa nulla; funziona altrettanto bene. 'saveIFS = "$ IFS"; IFS = ''; ls $ file; IFS = "$ saveIFS" ' –