如果你在Mac上并使用TextMate,虽然不是完全必要,但它可能会有所帮助。奇怪的PHP shell脚本行为
我的PHP的位置:
$which php
/opt/local/bin/php
脚本:
#!/opt/local/bin/php
<?php
shell_exec("echo -n 'my-string' > out.txt");
?>
的-n回声抑制,自动添加到所有外壳回声命令的换行符。
如果我运行从外壳上面的PHP代码:
chmod u+x myfile.php
./myfile.php
我最终“out.txt”,其内容之中的:
-n my-string
如果我运行的确切内TextMate的相同的代码,“out.txt”中的内容将是正确的:
my-string
我不能什么PHP数字高达机智h将字符串'-n'放在输出中。我真的很想知道为什么TextMate做的是正确的事情。我已经检查过,两者都使用相同的PHP,php -i显示的内容大多是相同的东西,当然在TextMate中运行,另一种在shell中有差异,所以一个输出具有指向该文件的指针,而另一个不指向“T。据我所知,$ PATH和$ ENV是相同的。
我已经尝试了几种不同的方法来解决这个问题,这些方法都不起作用。我实际上将无法使用解决方法,因为这已经被提炼成一个简单的案例来发布到SO。我的这个管道用于pbcopy的用例,我相信它只是一个Mac OS X特性,所以我在这里使用了>>重定向,因为这是通用的。
最终,我希望我的剪贴板上没有拖尾换行符的结果,因为粘贴在shell中会执行前面的任何内容,这是危险的。
感谢
我无法重现:$ PHP -r “了shell_exec(\” 回声-n '我的字符串'> out.txt \ “);” glopes @ nebm:〜$ cat out.txt my-string – Artefacto 2010-08-08 18:51:49
为什么不使用反引号? – EricR 2010-08-08 18:52:52