Ruby/Shell:;把「/&引用;猫;隐藏一个模糊的文件会弄乱终端

Ruby/Shell:;把「/&引用;猫;隐藏一个模糊的文件会弄乱终端,ruby,shell,undefined-behavior,Ruby,Shell,Undefined Behavior,我试图在Ruby中重写一些用于Windows的bash命令,并试图将一些系统文件完全弄乱终端:它随机向上(Windows)或向下(Linux)滚动 所讨论的文件如下: 我的Ruby程序是这样的: #!/package/host/localhost/ruby-2.0.0/bin/ruby #cat.rb File.open(ARGV[-1], "r") do |f| puts f.read f.close end 如果我(通过bash)对文件进行“cat”,那么行为也完全是随机

我试图在Ruby中重写一些用于Windows的bash命令,并试图将一些系统文件完全弄乱终端:它随机向上(Windows)或向下(Linux)滚动

所讨论的文件如下:

我的Ruby程序是这样的:

#!/package/host/localhost/ruby-2.0.0/bin/ruby
#cat.rb
File.open(ARGV[-1], "r") do |f|
    puts f.read
    f.close
end
如果我(通过bash)对文件进行“cat”,那么行为也完全是随机的

这有什么原因吗

谢谢你的帮助

问候,

Danyel.

该文件看起来像一个数据库。。。如果您在控制台上检查它,您将看到十六进制文本。您可以像这样使其“可读”:

puts File.read('path/to/file').unpack('H*')

对我来说没有奇怪的滚动(OSX/zsh)。您的终端显然(错误)将某些字符解释为转义序列。为什么要在标准输出上打印一个二进制文件?这只是一个随机文件,我给我的应用程序提供了用于测试的文件,我观察到了这种行为,并对缩小导致滚动的字符范围是否值得感到好奇。(也就是说,如果你有时间消磨时间的话)一个模糊的部分是我的C程序“cat”的a文件按预期运行,并且没有未定义的行为。只有在我切换到ruby之后,才会出现终端滚动。我的C代码:C代码以文本模式(
“rt”
)打开文件,而Ruby代码使用二进制模式(
“r”
)。