【发布时间】:2010-08-08 18:46:44
【问题描述】:
如果您在 Mac 上使用 TextMate,这可能会有所帮助,但并非完全必要。
我的php位置:
$which php
/opt/local/bin/php
脚本:
#!/opt/local/bin/php
<?php
shell_exec("echo -n 'my-string' > out.txt");
?>
回显的 -n 禁止自动添加到所有 shell 回显命令的换行符。
如果我从 shell 运行上面的 php 代码:
chmod u+x myfile.php
./myfile.php
我最终得到 'out.txt',其内容是:
-n my-string
如果我在 TextMate 中运行完全相同的代码,'out.txt' 的内容将是正确的:
my-string
我无法弄清楚 php 将文字字符串 '-n' 放在输出中是做什么的。我真的很想知道为什么 TextMate 会做正确的事情。我已经检查过两者都使用相同的 php,php -i 显示的内容大多相同,当然存在差异,因为一个在 TextMate 中运行,另一个在 shell 中运行,因此一个输出具有指向文件的指针,而另一个没有不。据我所知,$PATH 和 $ENV 是相同的。
我尝试了几种不同的方法来解决这个问题,但都没有奏效。实际上,我将无法使用解决方法,因为这已被简化为发布到 SO 的简单案例。我将此管道连接到 pbcopy 的用例,我认为这是 Mac OS X 独有的功能,所以我在这里使用 >> 重定向,因为这是通用的。
最终,我希望剪贴板上的结果没有尾随换行符,这很危险,因为将其粘贴到 shell 中会执行它之前的任何内容。
谢谢
【问题讨论】:
-
我无法重现:$ php -r "shell_exec(\"echo -n 'my-string' > out.txt\");" glopes@nebm:~$ cat out.txt 我的字符串