php shell_exec echo

时间:2012-03-16 03:46:04

标签: php echo shell-exec

我正在努力将微控制器与灯泡服务器连接起来。我试图在php中使用shell_exec运行命令echo -e -n "data \r" > /dev/ttyUSB0,但没有结果。从命令行可以正常工作。做了一点实验,我发现echo -e -n "1 \r"实际上回应了-e -n 1。有没有理由不采取-e或-n选项? 这是我的代码:

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

5 个答案:

答案 0 :(得分:1)

还有一些其他功能,试试这个功能也许你得到你的答案。

exec(command, $output);

此函数接受一个命令,并为$ output分配一个数组,其中每个元素都是生成输出的一行。

答案 1 :(得分:1)

为什么不使用PHP的文件系统函数而不是使用shell_exec和echo?

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

答案 2 :(得分:0)

我遇到了类似的问题,从php调用

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

请注意,该输出包含“-e”,而我预计' echo '命令会将 -e 解释为标志,并且不会将其发送到输出。

在做了一些调查后,我得出了以下结论:

  • 当从php调用 exec shell_exec 时 - 启动新的shell解释器。
    • php启动“ sh ”。
    • 当我在CentOS上运行时 sh bash 的符号链接,而 exec(“echo ...”)就像我一样工作本来应该的。
    • 现在我正在运行 Ubuntu sh 破折号的符号链接,而不是 bash
    • 最终的根本原因 - 破折号中的内置 echo 命令没有/了解'-e'标志,所以它只是将它转发给输出

答案 3 :(得分:0)

这是一个古老的问题,但如果其他人也遇到这个问题,那么它对我有用。

昨天晚上,我自己一直在乱搞这个问题。要使其正常工作,您需要使用的命令应该首先直接调用echo bin /bin/echo...而不是echo

另外,请不要忘记使用单引号/bin/echo...而不是双引号来避免PHP空字节检测错误(这部分是您正确完成的)。

答案 4 :(得分:0)

我遇到了与-e一起运行的类似问题,我试图从php更改密码

运行此功能

select num_mojud
from MyTable
order by case when num_mojud is 0 then 1 else 0 end, num_mojud

它说密码不匹配。检查回声我看到-e被包括作为回声的一部分所以我把它改为

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

然后它奏效了。