2014-03-28 117 views
1

我在Unix中創建了一個sh腳本,它基本上編譯了一個通過參數指定的程序,例如:sh shellFile cprogram.c,併爲編譯後的程序提供各種輸入文件。關於回車返回

這些輸入文件是在Unix中創建的,我已經測試過,我很滿意這些結果。我甚至用Unix中的輸入文件對它進行了測試,即使在最後還有一個額外的回車符,但我得到了很好的結果,我們可以將這個測試文件命名爲00ecr以供參考。如果我在Windows中創建了一個測試文件並將其轉移到Unix,那麼這個新的測試文件(稱爲00wind)可能會在我的shell程序中產生不好的結果。

這只是一個理論上的問題。我只是想知道,即使我用在Unix中創建的文件測試了我的shell腳本,它會佔用額外的回車嗎?

回答

1

如何在腳本中,可以使用Linux命令file,以確定如果文件了Windows風格的線路終端:

$file test.txt 
test.txt: ASCII text, with CRLF line terminators 

所以,你的腳本可能有這樣的轉換功能:

#!/bin/bash 

windows_file=`file $1 | grep CRLF` 

if [[ -z "$windows_file" ]]; then 
    echo "File already in unix format" 
else 
    # file need converting 
    dos2unix $1 
    echo "Converted a windows file" 
fi 

所以我們在這裏首先使用file實用程序輸出文件類型和grep CRLF字符串,以查看文件是否需要轉換。如果不是windows格式,grep將返回null,我們可以使用if [[ -z "$var" ]]語句測試空字符串。

然後就是dos2unix工具將其轉換:

$ dos2unix test.txt 
dos2unix: converting file test.txt to Unix format ... 
$ file test.txt 
test.txt: ASCII text 

這樣你能保證你的輸入總是「消毒」。

+0

我已經想過,但我真的想知道它是否弄糟我的結果。它主要是看我是否需要更改我的代碼。 – user3470766

+1

@ user3470766,你可以嘗試用'unix2dos'手動將你的文件轉換爲「windows style」來查看會發生什麼。儘管如此,千萬不要讓事情變得偶然,並且消化你的投入 – julumme