Linux
為什麼我在遠端機器上執行腳本時文件名包含問號?
我有一個小腳本,它只是獲取目前日期、執行 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 格式中有選項。
仍然是一個學習者,但是這種方法解決了我的問題,但是以前的解決方案有助於找到問題所在。