Ruby man文档中\换行注释用法误解致脚本报错问题咨询
Ruby
-S 参数脚本报错问题解析 首先,你的问题出在两个关键地方:
1. #!/usr/bin/env ruby -S 的写法错误
多数类Unix系统的#!解析器只会把第一个空格后的内容视为单个参数传递给env。也就是说,你的脚本开头行会被系统解析为让env去查找名为ruby -S的可执行文件——这显然不存在,直接触发"command not found"类的错误。
正确的写法应该把-S参数单独留给Ruby,而不是塞给env。如果要保留env的写法,应该写成:
#!/usr/bin/env ruby # 后续用 ruby -S 调用脚本时,-S 参数会生效
2. 误解了#\的作用
Ruby手册里的#\是为了实现跨shell和Ruby的兼容脚本:当用ruby -S scriptname运行时,#\会让Ruby把下一行当作注释忽略;但如果用shell直接运行该脚本,shell会跳过#开头的行,执行下一行的shell命令。
你把下一行写成了Ruby代码puts "Hi",当用ruby -S foo.rb运行时,这行代码会被#\标记为注释,自然不会输出任何内容。如果你的目标是让Ruby执行puts "Hi",完全不需要加#\,直接写正常的Ruby脚本即可:
#!/usr/bin/env ruby puts "Hi"
如果确实需要模拟#!的功能用-S参数调用,直接运行ruby -S foo.rb即可,此时Ruby会通过PATH找到你的脚本并执行,不需要在脚本里额外加#\。
内容的提问来源于stack exchange,提问作者Richie Thomas
相关产品推荐
相关产品推荐

