使用JRuby在Windows上编写Unix换行符

时间:2011-11-09 11:13:27

标签: ruby windows unix jruby newline

我正在编写一个Ruby脚本来生成Unix shell脚本,但是我无法让JRuby在Windows上编写Unix换行符。

我写了一个文件test.rb,其中包含:

File.open("test.sh", 'w') do |f|
  f.write("#!/bin/sh\n")
  f.write("echo hello\n")
end

当我使用命令java -jar jruby-complete-1.6.5.jar test.rb执行它时,生成的文件包含\r\n换行符而不是\n换行符。

如何强制JRuby使用Unix换行编写文本文件?

1 个答案:

答案 0 :(得分:9)

我设法通过在File.open

的参数中添加“b”来修复它
File.open("test.sh", 'wb') do |f|
  f.write("#!/bin/sh\n")
  f.write("echo hello\n")
end

IO class的文档说明如下:

Mode |  Meaning
-----+--------------------------------------------------------
 "b" |  Binary file mode (may appear with
     |  any of the key letters listed above).
     |  Suppresses EOL <-> CRLF conversion on Windows. And
     |  sets external encoding to ASCII-8BIT unless explicitly
     |  specified.
-----+--------------------------------------------------------