首先,你變量是xfile
但你嘗試使用變量file
由字面x
之前。我認爲x$file
應該是$xfile
。
其次,您對每個文件執行file
命令並每次覆蓋values
文件,這意味着只顯示最後一個文件。您可以通過預先刪除文件並使用>>
(附加)而不是>
(覆蓋)來解決此問題。
第三,file
命令是完全能夠處理多個參數,以便你真的只需要:
file * >values
也使用*
因爲*.*
是一個Windows/DOS的thingie - 如果你想基於UNIX下的所有文件像操作系統一樣,*
是正確的表單(或.*
以及如果你想隱藏文件)。
最後,沒有這些建議以上將解決您的實際問題,這幾乎肯定是DOS風格的行結束在你的文件存在。該錯誤消息與您在此案例中看到的完全匹配的完美。
在我的系統上,當我輸入DOS行結尾的腳本時,我得到相同的錯誤信息(主要是)。
如果你做一個od -xcb check.sh
,你很可能會看到類似這樣的:
0000020 0a0d 6f64 0a0d 6966 656c 2220 7824 6966
\r \n d o \r \n f i l e " $ x f i
015 012 144 157 015 012 146 151 154 145 040 042 044 170 146 151
與\r
字符顯示不正確的行結尾。
您可以使用自己喜歡的(像樣的)編輯器來查看和刪除這些或簡單地用apt-get
安裝dos2unix
(雖然你可能已經有此),並做到:
# sudo apt-get install dos2unix ## only if you don't have it already.
dos2unix check.sh >check2.sh
,然後使用check2.sh
。
雖然,記住,單行:
file * >values
仍然比for
環一個更好的選擇(但你還是要確保你使用UNIX行尾)。
哇謝謝paxdiablo – klijo 2012-01-15 14:48:39
很好的回答! +1 – 2012-01-15 19:17:59