我在 F24 上开发并且测试通过了,但是当我在 Travis CI 中尝试时,它们失败了。 AFAIK,他们(Travis CI)使用 Ubuntu 12.04 VM。该测试将运行的输出与之前收集的“黄金”输出进行比较,并将任何差异标记为失败。
在这种特殊情况下,会出现差异,因为cp
在不存在的文件上调用命令会产生错误消息,但两个系统之间的错误消息略有不同。在 Fedora 24 上,我得到:
$ cp foo bar
cp: cannot stat 'foo': No such file or directory
在 Ubuntu 12.04 VM(设置为模拟 Travis CI 环境)上,我得到:
$ cp foo bar
cp: cannot stat `foo': No such file or directory
注意 Ubuntu 输出中的反引号,而不是 F24 输出中的单引号。
我尝试过export LC_ALL=C
,但这对任何输出都没有任何作用。 F24 具有 coreutils 版本 8.25(其中包含 ls 输出中臭名昭著的引用文件名更改,但我认为这与我的问题无关)。 Ubuntu 12.04 的版本为 8.13。
我的问题:
1) 这是 coreutils 8.13 和 8.25 之间的变化吗?或者 Fedora 和 Ubuntu 编译 coreutils 的方式不同吗?
2)较新的 Ubuntu 版本是否在此(可能还有其他)错误消息中使用反引号?
3)有什么方法可以设置错误消息中使用的引号吗?在任一系统上?
4)在与“gold”输出进行比较之前,我可能会修改命令的输出并将所有反引号更改为单引号。对于更好的方法有什么建议吗?
编辑:我被告知我可以在 Travis CI 环境中运行更新版本的 ubuntu(添加“dist: trusty” .travis.yml
)。该版本 (16.04) 在 en_US.UTF-8 环境中使用 Unicode 单引号(代码点 #x2018)作为错误消息中的左引号和右引号;它在 C 语言环境中使用 ASCII 撇号 - 这对于我的目的来说已经足够了。
答案1
[编辑问题以添加此信息,但将其添加为答案只是为了结束它。我仍然不清楚为什么 12.04 使用反引号,但随着更新的版本可用,这个问题似乎没有实际意义。]
我被告知我可以在 Travis CI 环境中运行更新版本的 ubuntu(将“dist: trusty”添加到.travis.yml
)。该版本 (16.04) 在 en_US.UTF-8 环境中使用 Unicode 单引号(代码点 #x2018)作为错误消息中的左引号和右引号;它在 C 语言环境中使用 ASCII 撇号 - 这对于我的目的来说已经足够了。