Php 一个奇怪但可能很简单的shell_exec问题

Php 一个奇怪但可能很简单的shell_exec问题,php,Php,如果我在命令行上运行此命令(在Mac OS X上): 我得到了预期的结果,即一个文件foo cmd.txt包含“hello”,末尾没有任何换行符 但是,如果我运行以下PHP代码: <?php shell_exec("echo -n \"hello\" > foo-php.txt"); ?> 我得到一个文件foo php.txt,其中包含文本“-n hello”,后跟一个新行!换句话说,参数-n作为输出潜入,而不是作为参数处理 如何解决此问题?尝试以下方法: shell_e

如果我在命令行上运行此命令(在Mac OS X上):

我得到了预期的结果,即一个文件
foo cmd.txt
包含“
hello
”,末尾没有任何换行符

但是,如果我运行以下PHP代码:

<?php
shell_exec("echo -n \"hello\" > foo-php.txt");
?>

我得到一个文件
foo php.txt
,其中包含文本“
-n hello
”,后跟一个新行!换句话说,参数
-n
作为输出潜入,而不是作为参数处理

如何解决此问题?

尝试以下方法:

shell_exec("echo\ -n \"hello\" > foo-php.txt");

您的命令使用的是shell内置版本的
echo
,它不支持
-n
选项


试试
/bin/echo

你是如何理解的(从一个系统到另一个系统,或者从一个PHP版本到另一个PHP版本)shell_exec是否使用其自己的特定命令的内置版本?@Enchilada问题不在于
shell_exec
,而是
shell_exec
调用的系统外壳具有内置版本。简单的答案是,不要使用
shell\u exec
来完成一些可以用几行PHP代码轻松完成的事情。
shell_exec("echo\ -n \"hello\" > foo-php.txt");