zway.devices[5].instances[1].SwitchBinary.data.level.bind(function(type, arg) { if (!(type & self.ZWAY_DATA_CHANGE_TYPE["Invalidated"])) { if (this.value == 1) { system("echo UPDATE Dev_Z SET state=1,last_up='now()' WHERE device='Switch 5:1' | mysql -N -uxxxx -pxxxxx smart"); } } }); Вот такой код не могу заставить работать - сначала "не нравились" скобки в last_up=now() , одинарные кавычки помогли, теперь переменная 'Switch 5:1' должна передаваться в мускул обязательно в кавычках, а она передается без них... В командной строке, а также из bash и Python скриптов этот код работает как часы. Вот лог мускула:
115207 Query UPDATE Dev_Z SET state=1,last_up=now() WHERE device=Switch 5:1
Можно ли как то обойти это ?

задан 02 Сен '14, 16:34

Antti's gravatar image

Antti
1231114
процент согласия: 66%


В баше одинарные кавычки отлично игнорируются, их нужно экранировать:

MacBook-Air:~ user$ echo UPDATE Dev_Z SET state=1,last_up='now()' WHERE device='Switch 5:1'
UPDATE Dev_Z SET state=1,last_up=now() WHERE device=Switch 5:1

MacBook-Air:~ user$ echo UPDATE Dev_Z SET state=1,last_up='now()' WHERE device=\'Switch 5:1\'
UPDATE Dev_Z SET state=1,last_up=now() WHERE device='Switch 5:1'

Я бы порекомендовал вынести это в отдельный bash-файл, а уже его запускать через system() и передавать ему параметры при необходимости. Тогда а) не придется хранить пароль в куче мест, и б) не придется каждую такую конструкцию прописывать в .syscommands.

ссылка

отвечен 02 Сен '14, 22:38

pieceofsummer's gravatar image

pieceofsummer
2513
процент согласия: 50%

В баше я весь запрос беру в двойные кавычки и экранирование не требуется... В принципе согласен с Вами по пункту а) полностью, по пункту б) в .syscommands достаточно было прописать один раз echo и все заработало. Может правильный пример покажете запуска файла с НЕСКОЛЬКИМИ параметрами ? Заодно для памяти тут останется...

(02 Сен '14, 23:56) Antti

Ну ваш пример system("echo UPDATE Dev_Z") – чем не запуск с несколькими параметрами? Кроме того, system() может принимать более одного аргумента, и все остальные будут переданы в качестве параметров. Так, например, system("echo", "UPDATE", "Dev_Z") аналогичен предыдущему.

Что достаточно echo в .syscommands в данном случае – вообще говоря, бага. Так можно во что угодно перенаправить вывод. Вероятно, пайпы будут запрещены в system() в будущих версиях.

(03 Сен '14, 00:59) pieceofsummer

Еще один вопрос возник - как передать в ф-ю system, в запрос мускула, переменную из ява скрипта, и как из запроса select например передать значение обратно в скрипт ? Есть такая возможность ? Что то перепробовал разного, не получается... :(

(05 Сен '14, 12:00) Antti
Ваш ответ
toggle preview

Следить за этим вопросом

По почте:

Авторизовавшись, здесь Вы сможете подписаться на обновления по этому вопросу.

По RSS:

Ответы

Ответы и комментарии

Основы размётки

  • *курсив* или _курсив_
  • **жирный** или __жирный__
  • ссылка:[текст](http://url.com/ "Суть вопроса")
  • картинка?![alt текст](/path/img.jpg "Суть вопроса")
  • нумерованый список: 1. Foo 2. Bar
  • чтобы добавить перенос строки в тексте, сделайте два переноса строки в редакторе
  • базовые теги HTML также поддерживаются

Теги к вопросу:

×253
×158
×56

Задан: 02 Сен '14, 16:34

Просмотров: 1,255 раз

Отредактирован: 05 Сен '14, 12:00

powered by OSQA