0

给定一个带有 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 }'

为什么?

4

1 回答 1

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包含:(交换了第一行和第二行)

# foo bar
#!/usr/bin/env ruby
echo "hello from $SHELL"

它将作为普通的 shell 脚本运行:

$ ./test.rb
hello from /.../bin/zsh

因此,您得到的错误不是 Ruby 错误,它来自您的 shell。

于 2016-03-17T15:37:56.113 回答