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', поэтому она просто перенаправляет ее на вывод