我有一个很小的脚本,可以简单地获取当前日期,运行PHP脚本并将输出(和错误)重定向到包含当前日期的文件名。
DATE=$(date +"%Y%m%d")
FILE="log/${DATE}.log"
php -q script.php >> $FILE 2>&1
当我在本地计算机(Windows 7,Aptana IDE)上运行此脚本时,PHP脚本可以正常工作,并且日志文件具有预期的文件名,例如20140502.log
。
但是,当我通过SFTP将脚本推送到我的远程计算机并执行该脚本时,文件名看起来像这样:
20140502?.log?
可能是什么问题?这是一个必然的错误吗(例如,SFTP上传的编码是ANSII,期望使用UTF-8)?还是我必须更改脚本本身中的任何内容?
有关系统/外壳的信息:
[foo@bar path]$ sh --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
有趣的事实:如果该脚本由cronjob调用,则不会出现问号。仅当我手动运行脚本时。
@ 0xC0000022L输出为
—
Gottlieb Notschnabel 2014年
LANG=en_US.UTF-8
。
抱歉,不清楚。我的意思是两端的输出。
—
0xC0000022L 2014年
对不起,我很想念...很遗憾,此命令在Windoze上未输出任何内容:/
—
Gottlieb Notschnabel 2014年
您是否知道重定向的顺序(
—
格伦·杰克曼
2>&1 >> $FILE
)将stderr发送到终端,将stdout发送到文件?如果您也希望stderr转到文件,则需要>> $FILE 2>&1
?
表示无法显示字符。当然听起来像是编码差异。你能给我们输出env|grep -E '(LC|LANG)'
吗?