#bash #syntax
#bash #синтаксис
Вопрос:
При выполнении команды
cmake ../../ -DCMAKE_C_FLAGS="-DFOO -DBAR ${CMAKE_C_FLAGS}"
в bash это работает нормально.
При прохождении скрипта происходит сбой:
./myscript "-DFOO -DBAR"
cmake ../../ -DCMAKE_C_FLAGS="-DFOO -DBAR ${CMAKE_C_FLAGS}"
Parse error in command line argument: -DBAR
myscript:
#!/bin/bash
cmake_options='-DCMAKE_C_FLAGS="'$1' ${CMAKE_C_FLAGS}"'
echo "cmake ../../ "$cmake_options
cmake ../../ $cmake_options
Я знаю, что это должно быть как-то связано с экранирующими символами, поэтому я перепробовал все, что мог (двойные / одинарные кавычки, обратные кавычки, экранирование обратной косой черты, использование $ () и т.д.), Но я не смог найти исправление…
Я не эксперт по Linux, кто-нибудь может мне помочь, пожалуйста?
PS: Я работаю над cygwin, но я тестировал и на обычном Linux, и поведение такое же.
Редактировать:
@Assere как описано, я уже перепробовал много вещей, и изменение с $ 1 на «$ 1» не устраняет проблему. То, что я подразумеваю под «bash», находится непосредственно в командной строке, в то время как то, что я подразумеваю под «sh», — это «myscript.sh » файл. У меня есть #!/bin/bash, я просто не знал, что это называется shebang. Я также попытался процитировать $ cmake_options, но безрезультатно.
Комментарии:
1. Вероятно, вам следует начать с кавычек
$1
вот так :"$1"
2. Также в вашем скрипте вы запускаете
cmake
команду в папке../../
, тогда как в команде bash вы запускаете ее в../../Sources
папке3. И почему вы говорите, что есть разница между
bash
иsh
?sh
В вашем скрипте есть ошибка?4.
sh
не имеет ничего общего с прямым вызовом скрипта. Есть ли у вас специальная строка в начале вашего файла сценария? Если нет, поместите следующий код в качестве 1-й строки вашего скрипта :#!/usr/bin/env bash
. Это называется shebang и указывает Linux, какой интерпретатор использовать (здесь это заставляет использоватьbash
)5. Также, когда у вас есть пробелы в вашей переменной, часто важно заключить их в кавычки. Попробуйте использовать кавычки
$cmake_options
как"$cmake_options"
везде в вашем скрипте
Ответ №1:
вместо этого используйте этот скрипт:
#!/bin/bash
cmake_options=-DCMAKE_C_FLAGS=""$1 ${CMAKE_C_FLAGS}""
echo "cmake ../../ "$cmake_options
cmake ../../ "$cmake_options"