2014-03-28 66 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