У сценариев Autoconf возникают проблемы с именем файла или именем пути с пробелами. Например,
./configure CPPFLAGS="-I\"/path with space\""
приводит к (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
Команда компиляции из. /configure - это ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
, и я не могу ее изменить (возможно, но, возможно, работа над autoconf не является общим решением).
Я думаю, что это сводится к получению переменной оболочки, которая содержит пробелы, которые будут анализироваться как одна переменная командной строки, а не разделены на пробелы. Самый простой пример оболочки, который я могу придумать, - создать файл с пробелами и попытаться перечислить с помощью ls
с переменной оболочки в качестве аргумента ls
:
$ touch "a b"
$ file="a b"
$ ls $file
ls: a: No such file or directory
ls: b: No such file or directory
Это работает, но является незаконным, поскольку в autoconf я не могу изменить код оболочки:
$ ls "$file"
a b
Ни одна из следующих попыток при цитировании вещей не работает:
$ 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\\"`"
и т.д.
Невозможно ли выполнить скрипты оболочки? Есть ли магическое цитирование, которое расширяет переменную оболочки с пробелами в один аргумент командной строки?