关于回车

时间:2014-03-28 00:07:46

标签: linux windows shell unix carriage-return

我在Unix中创建了一个sh脚本,它基本上编译了一个通过参数指定的程序,例如:sh shellFile cprogram.c,并为编译后的程序提供各种输入文件。

这些输入文件是在Unix中创建的,我测试过它,我很满意这些结果。我甚至用输入文件测试了它,在Unix中制作,甚至在最后还有一个额外的回车,但我得到了很好的结果,让我们命名这个测试文件00ecr以供参考。是否有可能如果我在Windows中创建了一个测试文件并将其传输到Unix,那么这个新的测试文件(称为00wind)将在我的shell程序中产生错误的结果。

这只是一个理论问题。我只是想知道它是否会破坏,即使我用Unix制作的文件测试我的shell脚本,这会占额外的回车?

1 个答案:

答案 0 :(得分: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字符串,以查看文件是否需要转换。如果grep不是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

这样您就可以确保您的输入始终处于“清理”状态。