确保在linux中可重复的目录排序

前端之家收集整理的这篇文章主要介绍了确保在linux中可重复的目录排序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我经营一家 hosted continuous integration公司,我们在Linux上运行客户代码.每次运行代码时,我们都会在单独的虚拟机中运行它.出现的一个常见问题是,客户的测试有时会因为在VM上检出其代码的目录顺序而失败.

让我详细介绍一下.在OSX上,HFS文件系统确保始终以相同的顺序遍历目录.使用OSX的程序员假设如果它在他们的机器上运行,它必须在任何地方工作.但它通常不适用于Linux,因为linux文件系统在遍历目录时不提供排序保证.

例如,考虑有2个文件,a.rb,b.rb. a.rb定义MyObject,b.rb使用MyObject.如果首先加载a.rb,一切都会正常工作.如果首先加载b.rb,它将尝试访问未定义的变量MyObject,并失败.

但比这更糟糕的是,它并不总是失败.因为Linux上的文件系统排序没有订购,所以它在不同的机器上将是不同的顺序.这更糟糕,因为有时测试通过,有时它们会失败.这是最糟糕的结果.

所以我的问题是,有没有办法使文件系统排序可重复.有些标志可能是ext4,它说它总是以某种顺序遍历目录?或者可能是一个具有此保证的不同文件系统?

解决方法

我知道这不是您正在寻找的答案,但我相信正确的解决方案是避免取决于目录中文件的顺序.也许它在所有HFS文件系统中始终保持一致,也许你可以找到一种方法使它在ext4或其他一些文件系统中保持一致,但从长远来看它会比你节省更多麻烦.当他们没有意识到它只与某些类型的文件系统而不是其他类型的文件系统兼容时,其他人使用你的应用程序会遇到令人讨厌的惊喜.如果从备份还原文件系统,则顺序可能会更改.您可能会遇到兼容性问题,因为HFS一致性顺序和ext4一致性顺序可能不一样.

只需读取所有目录条目,然后按字典顺序对列表进行排序,然后再使用它.就像ls一样.

你提到文件a.rb和b.rb,但是如果我们谈论编程语言源文件,那么每个文件是否应该负责确保它导入所有依赖项?

猜你在找的Linux相关文章