我在unix中创建了一个sh
脚本,它基本上编译通过参数指定的程序,例如:sh shellFile cprogram.c
,并为编译后的程序提供各种输入文件。
这些输入文件是在unix中创建的,我已经测试过了,我对这些结果很满意。我甚至用unix中的输入文件测试过它,这些文件的末尾甚至有一个额外的回车,但是我得到了很好的结果,让我们将这个测试文件命名为00ecr
以供参考。如果我在windows中创建了一个测试文件并将其传输到unix,那么这个新的测试文件(我们称之为00wind
)可能会在我的shell程序中产生不好的结果。
这只是一个理论问题。我只是想知道它是否会把事情搞砸,即使我用unix中的文件测试了shell脚本,这些文件解释了额外的回车?
最佳答案
在脚本中,使用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
实用程序输出文件类型和grepCRLF
字符串,以查看文件是否需要转换。如果不是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
这样你就可以确保你的输入总是被“消毒”的。