相同的脚本,不同的行为

时间:2012-09-01 20:11:50

标签: scripting shell

我偶然发现了一个有趣的错误......仍在试图找出究竟发生了什么。也许你可以提供帮助。

首先,上下文。我目前正在建立另一个人到HTML转换器(由于某些原因我不会在这里激励,但我需要它。)

因此,请查看下面的屏幕截图(请参阅链接),更准确地说是在概述的位置。看到?在上壳上,我有& lt;和& gt;,即转义html。 虽然在下面的外壳上我有<和>直接

但正如你所看到的那样(或者我是否真的需要看玻璃?),man 2 semget | webmanner命令which webmanner与{{1}}一样。这两个大致在同一时刻执行,没有对脚本之间进行任何修改。

[哎呀,还不能张贴图片......链接就是这里的]

http://aspyct.org/media/webmanner-bug.png

但下面的shell比较旧(约1小时前开放)。较新的贝壳全部打印出来& lt ;.所以我的第一个猜测是,它以某种方式对文件的旧inode或旧块或其他任何内容进行了缓存引用。

因此,我在开始时修改了部分脚本,然后在结尾处修改了不同的消息。而且,令人惊讶的是,这两个终端上显示的消息。但是,& lt;和<。

我很困惑......如何解释这种行为?我正在研究OSX 10.8(Mountain Lion)

编辑:好的,有一个很大的区别:下面的shell使用ruby 1.9.3,而上面的是1.8.7。两个版本之间的字符串处理是否有任何已知的差异?

1 个答案:

答案 0 :(得分:2)

您使用的是htmlentities库吗?如果是这样,那么这个bug修复可能就是你所看到的

  

Ruby 1.9.3与1.9.2的行为略有不同:结果   即使只包含ASCII字符,encode也不是ASCII。   这可能并不重要,但这种变化使两个版本都产生了   同样的结果。

https://github.com/threedaymonk/htmlentities/commit/46dafc959de03a02d0c1705bef7f1b157b350025