php shell_exec echo - PullRequest
       14

php shell_exec echo

0 голосов
/ 16 марта 2012

Я работаю над взаимодействием микроконтроллера с сервером ламп. Я пытаюсь запустить команду 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 ]

1 голос
/ 16 марта 2012

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

file_put_contents('/dev/ttyUSB0', "1 \r");
1 голос
/ 16 марта 2012

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

exec(command, $output);

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

0 голосов
/ 28 мая 2018

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

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

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

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

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

А потом все заработало.

0 голосов
/ 03 ноября 2017

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

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

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

0 голосов
/ 24 октября 2016

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

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

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

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

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