当我在远程计算机上运行脚本时,为什么文件名包含问号?

当我在远程计算机上运行脚本时,为什么文件名包含问号?

我有一个小脚本,它只是获取当前日期,运行 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 调用,则不会出现问号。仅当我手动运行脚本时。

答案1

您可能在行尾有一些不可打印的字符(例如 Windows 中的 CRLF),运行:

cat -A scriptname

在远程计算机上,它将显示脚本中的所有字符。然后,您可以转换为类unix格式运行

dos2unix scriptname

答案2

在尝试答案后发现 Notepad ++ 对于纠正此问题非常有用

cat -A 脚本名>

dos2unix 脚本名

因为在尝试转换时仍然会出现错误。

通过Notepad ++,可以在编辑菜单/EOL Conversion/Unix/OSX Format 中找到该选项。

仍然是一个学习者,但这种方法解决了我的问题,但是以前的解决方案有助于找到问题所在。

相关内容