给定一个Ruby 2.3.0p0的文件:
#!/usr/bin/env ruby
# frozen_string_literal: true
# Exit cleanly from an early interrupt
Signal.trap("INT") { abort }
这很好。
# frozen_string_literal: true
#!/usr/bin/env ruby
# Exit cleanly from an early interrupt
Signal.trap("INT") { abort }
会导致错误:
syntax error near unexpected token `"INT"'
`Signal.trap("INT") { abort }'
为什么?
答案 0 :(得分:4)
shebang必须出现在文件的初始行。
包含以下内容的文件test.rb
#!/usr/bin/env ruby
# foo bar
puts "hello from #{RbConfig.ruby}"
将通过Ruby运行:
$ ./test.rb
hello from /.../ruby-2.3.0/bin/ruby
但如果test.rb
包含:(第1和第2行交换)
# foo bar
#!/usr/bin/env ruby
echo "hello from $SHELL"
它将作为普通的shell脚本运行:
$ ./test.rb
hello from /.../bin/zsh
因此,您所获得的错误不是Ruby错误,而是来自您的shell。