Linux

為什麼我在遠端機器上執行腳本時文件名包含問號?

  • February 7, 2017

我有一個小腳本,它只是獲取目前日期、執行 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 呼叫,則不會出現問號。僅當我手動執行腳本時。

您可能在行尾有一些不可列印的字元(例如,來自 Windows 的 CRLF),執行:

cat -A scriptname

在遠端機器上,它會顯示腳本中的所有字元。然後,您可以轉換為類unix格式執行

dos2unix scriptname

發現 Notepad ++ 對在嘗試回答後更正此問題非常有用

cat -A 腳本名>

dos2unix 腳本名

因為這在嘗試轉換時仍然會出現錯誤。

通過記事本++,在編輯菜單/EOL 轉換/Unix/OSX 格式中有選項。

仍然是一個學習者,但是這種方法解決了我的問題,但是以前的解決方案有助於找到問題所在。

引用自:https://unix.stackexchange.com/questions/127562