我在Unix中创建了一个sh
脚本,它基本上编译了一个通过参数指定的程序,例如:sh shellFile cprogram.c
,并为编译后的程序提供各种输入文件。
这些输入文件是在Unix中创建的,我测试过它,我很满意这些结果。我甚至用输入文件测试了它,在Unix中制作,甚至在最后还有一个额外的回车,但我得到了很好的结果,让我们命名这个测试文件00ecr
以供参考。是否有可能如果我在Windows中创建了一个测试文件并将其传输到Unix,那么这个新的测试文件(称为00wind
)将在我的shell程序中产生错误的结果。
这只是一个理论问题。我只是想知道它是否会破坏,即使我用Unix制作的文件测试我的shell脚本,这会占额外的回车?
答案 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
这样您就可以确保您的输入始终处于“清理”状态。