如果你在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