php shell_exec echo

Я работаю над взаимодействием микроконтроллера с сервером ламп. Я пытаюсь запустить команду echo -e -n "data \r" > /dev/ttyUSB0 используя shell_exec в php, но безрезультатно. Он отлично работает из командной строки. Сделав небольшой эксперимент, я обнаружил, что echo -e -n "1 \r" на самом деле отголоски -e -n 1, Есть ли причина, по которой он не будет использовать опции -e или -n? Вот мой код:

    <?php
    shell_exec('echo -e -n "1 \r" > /dev/ttyUSB0');
    ?>

5 ответов

Решение

Вместо использования shell_exec и echo, почему бы не использовать функции файловой системы PHP?

file_put_contents('/dev/ttyUSB0', "1 \r");

Есть и другие функции, попробуйте эту функцию, возможно, вы получите ответ.

exec(command, $output);

Эта функция принимает команду и присваивает $output массив, где каждый элемент является строкой сгенерированного вывода.

У меня была похожая проблема с -e, я пытался сменить пароль с php

запуск этого не сработал

exec("echo -e \"$pass\\n$pass\" | passwd $user");

Он сказал, что пароли не совпадают. Проверяя эхо, я увидел, что -e был включен как часть эха, поэтому я изменил его на

exec("echo \"$pass\\n$pass\" | passwd $user");

И тогда это сработало.

Это старый вопрос, но он подходит мне, если кто-то еще сталкивается с этим.

Вчера вечером я возился и боролся с этим сам. Чтобы это работало, команда, которую вы должны использовать, должна начинаться с прямого вызова echo bin /bin/echo... вместо только echo,

Также не забудьте использовать одинарные кавычки /bin/echo... вместо двойной кавычки, чтобы избежать ошибки обнаружения нулевого байта PHP (эту часть вы сделали правильно).

Я столкнулся с подобной проблемой, звоня с php

php > echo shell_exec("echo -e aaa\tbbb");
-e aaa bbb

обратите внимание, что вывод содержит "-e", хотя я ожидал, что команда "echo" будет интерпретировать -e как флаг и не будет отправлять его на выход.

После некоторого расследования я пришел к следующему выводу:

  • когда exec или shell_exec вызываются из php - запускается новый интерпретатор оболочки.
    • php запускает "sh".
    • Когда я работал на CentOS, sh был символической ссылкой на bash, а exec("echo ...") работал так, как я ожидал.
    • Теперь я использую Ubuntu. Sh это символическая ссылка на тире, а не Bash!
    • И, наконец, основная причина - встроенная команда echo в dash не имеет / понимает флаг '-e', поэтому она просто перенаправляет ее на вывод
Другие вопросы по тегам