在ruby程序开始时编写以下命令有什么用?
#!/usr/local/bin/ruby -w
是特定于操作系统的命令吗?它对窗户上的红宝石有效吗?如果没有,那么Windows中的等效命令是什么?
答案 0 :(得分:60)
它被称为Shebang。它告诉程序加载器使用什么命令来执行文件。因此,当您运行./myscript.rb
时,它实际上会转换为/usr/local/bin/ruby -w ./myscript.rb
。
Windows使用文件关联用于相同的目的; shebang线没有效果(编辑:见FMc的回答)但也没有造成任何伤害。
便携式方式(在Cygwin和RVM下工作)将是:
#!/usr/bin/env ruby
这将使用env命令找出Ruby解释器的位置,然后运行它。
编辑:显然,Cygwin会与/usr/bin/env ruby -w
行为不当,并尝试查找ruby -w
而不是ruby
。您可能希望将-w
的效果放入脚本本身。
答案 1 :(得分:23)
Shebang行是可选的,如果你运行ruby解释器并将脚本作为命令行参数传递给它,那么你在命令行上设置的标志就是ruby运行的标志。
Shebang系列根本不是红宝石(除非你想把它称为红宝石评论)。它真的是shell脚本。大多数linux和unix用户都运行BASH shell(代表Borne Again SHell),但几乎每个操作系统都有一个命令解释器,它将尊重Shebang。
“#!/ usr / local / bin / ruby -w”
"她"部分是octothorp(#),又名英镑符号,数字符号,哈希标记,现在哈希标记(我仍称它为tic-tac-toe,只是因为)。
" bang"部分是惊叹号(!),它就像敲打桌子上的拳头来惊呼命令。
在Windows上," Shell"是命令提示符,但即使没有黑色DOS窗口,命令解释器也将根据文件关联运行脚本。如果命令解释器或编程语言正在阅读shebang并确保标志得到尊重,重要的是,它们是否值得尊敬,这并不重要。
" -w"是一面旗帜。基本上它是ruby在运行脚本时遵循的指令。在这种情况下" -w"打开警告,以便在执行脚本期间获得额外警告(脚本保持运行)或错误(脚本停止运行)。在程序期间可以捕获警告和例外并采取措施。这些帮助程序员发现导致意外行为的问题。
我是快速和肮脏的脚本的粉丝,以完成工作,所以没有-w。我也是高质量可重复使用编码的粉丝,所以一定要使用-w。适合工作的正确工具。如果你正在学习,那么总是使用-w。当你知道你正在做什么,并停止在快速任务上使用-w时,你将开始弄清楚何时有助于使用-w而不是花费数小时来解决问题。 (提示,当问题的原因不明显时,只需添加-w并运行它以查看您获得的内容)。
" -w"需要一些额外的编码来清楚地表达你的意思,所以它并没有立即解决问题,但如果你已经用-w编写代码,那么你就不会在添加必要的位时遇到很多麻烦制作一个带有警告的小脚本。事实上,如果您习惯使用-w,那么您可能已经按照这种方式编写代码,并且除非您忘记了某些内容,否则它不会改变任何内容。 Ruby需要更少的管道代码"然后大多数(也许是全部)编译语言都像C ++一样,所以选择不使用-w并不能让你节省很多打字,只是让你在尝试运行脚本之前少想一想(恕我直言)。
-v是详细模式,并且不会更改脚本的运行(不会引发警告,也不会在新位置停止脚本)。几个站点和讨论调用-w verbose模式,但-w是警告模式,它会更改脚本的执行。
答案 2 :(得分:8)
虽然shebang行的执行行为不会直接转换为Windows世界,但该行中包含的标志(例如问题中的-w
)确实会影响正在运行的Ruby脚本。
Windows机器上的示例1:
#!/usr/local/bin/ruby -w
puts $VERBOSE # true
Windows机器上的示例2:
#!/usr/local/bin/ruby
puts $VERBOSE # false