这篇文章是记录遇到的一个问题,简单总结为:
file命令获取文件类型,如果该文件内容第一个字符为(,那么返回值为空。 该问题在4.17版本里出现,5.04版本里已经修复。中间的版本由于我没有这样的环境,所以无法测试。
想看具体的过程可以接着往下看。
之前做的一个内部平台里涉及到把编译后的文件上线,上线脚本里有文件diff功能,也就是将有修改文件的diff显示出来让使用者确认。 对于像图片,swf之类的资源由于无法diff,所以即使有修改也直接跳过。 这里是通过获取文件类型来识别的,如果文件类型里不包含text字样,那么不进行diff。识别代码如下:
type=`file $svn_src_dir/$file | grep "text"`
今天有同学说部分js文件有修改,但没有显示diff。最后发现有些文件这里获取到的type是false.
NAME file - determine file type
SYNOPSIS file [ -bchikLnNprsvz ] [ -f namefile ] [ -F separator ] [ -m magicfiles ] file ... file -C [ -m magicfile ]
DESCRIPTION This manual page documents version 4.17 of the file command.
分析这些文件,发现这些文件都使用js闭包,文件内容大致都是这样的:
(function(){
//逻辑代码
})()
逐步排查发现,如果文件内容第一个字符为(,那么不管后面的内容是啥,在4.17版本下返回值都为空。 但在5.04版本下是ok的。
file命令提供了-i参数,获取文件的mime-type。一般文本文件的mime-type为text/plain。那么就可以通过获取文件的mime-type来解决。
type=`file -i $svn_src_dir/$file | grep "text"`
当然升级版本才是最好的解决办法。
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8