Как заставить обратные галочки принять переменные как переменные?

Метод, который работал для меня на Debian Wheezy 7.6:

sudo apt-get install subversion yasm build-essential autoconf libtool zlib1g-dev libbz2-dev libxml2-dev libogg-dev libvorbis-dev libsamplerate-dev libfribidi-dev libfreetype6-dev libfontconfig1-dev libass-dev libmp3lame-dev libx264-dev intltool libglib2.0-dev libdbus-glib-1-dev libgtk-3-dev libgudev-1.0-dev libwebkitgtk-3.0-dev libnotify-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libappindicator-dev libtheora-dev
svn checkout svn://svn.handbrake.fr/HandBrake/trunk hb-trunk
cd hb-trunk
./configure --disable-gtk --launch
cd build
sudo make install

Я использовал '--disable-gtk' только для сборки/установки HandadingCLI .

Также обратить внимание, что вы можете читать о необходимых зависимостях, и такой в ридми в svn загрузил файлы: hb-trunk/doc/BUILD-Linux

0
27.03.2015, 02:17
3 ответа

Две вещи, которые вам нужно сделать:

  1. Вам не нуждаются в результате вашего вызова Mosquitto_Pub
  2. Ваш -T параметр Mosquitto_Pub должен быть окружен Двойные цитаты ( »), а не отдельные цитаты ( )

в частности (2) вот причина вашей проблемы. Односмысленные цитаты не позволят оценке $ переменных.

    if ...
    then
      #change location of machine
      mosquitto_pub -t "/${user_defined_new_machine_location}/cmd" -m '-changelocation'
       ...
2
28.01.2020, 02:17

Как сказал Roima в комментарии, вы должны использовать двойные цитаты для переменных, которые вы хотите расширить (так, »$ location" ), как отдельные цитаты, защищающие переменные от расширения Отказ

1
28.01.2020, 02:17

Строки в одиночных цитатах используются как есть. В одной цитируемой строке единственный специальный символ символ цитаты, который заканчивается строкой.

В строках в двойных цитатах, персонажи «\ $ являются специальными: « заканчивается строка, `делает следующий символ терять свою специальную интерпретацию, ` начинает замену команды, и $ запускает переменную замену, замену команды или арифметическое расширение. Таким образом, поскольку вы хотите расширить переменные, используйте двойные кавычки вместо одиночных кавычек. Это не связано с использованием командной замены.

В дополнениех замена команд не имеет смысла в контексте. Вы принимаете вывод команды Mosquitto_Pub ... , расщепляя его на пробеле, интерпретируя каждое из полученных слов как шаблон шаблона и используя результат этого расширения в виде команды и его аргументов. Я не уверен, что эта программа пытается сделать; Если вы просто хотите запустить команду CoSquterto_Pub , удалите образец. Если вы хотите назначить его вывод в переменной, вам нужно написать такое назначение, такое как

some_variable=`mosquitto_pub -t "/$user_defined_new_machine_location/cmd" -m '-changelocation'`

на необрабовленной ноте, не используйте имена переменной, такие как Состояние_While_One . Это имя бессмысленно. Используйте имя, которое отражает то, для чего используется переменная. Для этого конкретного примера вам не нужна вариабельная вариация - сделайте это вместо этого:

while true; do
  …
  if …; then
    mosquitto_pub …
    break
  fi
done
2
28.01.2020, 02:17

Теги

Похожие вопросы