在ruby程序的开头有什么用“#!/ usr / local / bin / ruby​​ -w”

在ruby程序开始时编写以下命令有什么用?

#!/usr/local/bin/ruby -w 

它是特定于OS的命令吗? 它对窗户上的ruby有效吗? 如果没有,那么windows中的等效命令是什么?

Shebang行是可选的,如果你运行ruby解释器并将脚本作为命令行参数传递给它,那么你在命令行上设置的标志就是ruby运行的标志。

Shebang系列根本不是ruby(除非你想把它称为ruby评论)。 这真的是shell脚本。 大多数linux和unix用户都在运行BASH shell(代表Borne Again SHell),但几乎每个操作系统都有一个命令解释器来支持Shebang。

“#!/ usr / local / bin / ruby​​ -w”

“她”部分是octothorp(#),又名英镑符号,数字符号,哈希标记,现在哈希标记(我仍然称之为tic-tac-toe,只是因为cuz)。

“爆炸”部分是惊叹号(!),就像敲打拳头在桌子上惊呼命令一样。

在Windows上,“Shell”是命令提示符,但即使没有黑色DOS窗口,命令解释程序也将根据文件关联运行脚本。 如果命令解释器或编程语言正在阅读shebang并确保标志得到尊重,那么重要的一点是,它们很荣幸。

“-w”是一面旗帜。 基本上它是ruby在运行脚本时遵循的指令。 在这种情况下,“ – w”会打开警告,因此在执行脚本期间,您将获得额外警告(脚本保持运行)或错误(脚本停止运行)。 在程序期间可以捕获警告和例外并采取措施。 这些帮助程序员发现导致意外行为的问题。

我喜欢快速而肮脏的脚本来完成工作,所以没有-w。 我也是高质量可重复使用编码的粉丝,所以一定要使用-w。 适合正确工作的合适工具。 如果你正在学习,那么总是使用-w。 当你知道自己在做什么,并停止在快速任务中使用-w时,你将开始弄清楚它何时有助于使用-w而不是花费数小时来解决问题。 (提示,当问题的原因不明显时,只需添加-w并运行它以查看您获得的内容)。

“-w”需要一些额外的编码来清楚地表达你的意思,所以它不能立即解决问题,但如果你已经用-w编写代码,那么添加必要的位就不会有太多麻烦制作一个带有警告的小脚本。 事实上,如果你习惯使用-w,你可能已经用这种方式编写代码了 – 除非你忘记了什么,否则-w不会改变任何东西。 Ruby需要远远少于“管道代码”,然后大多数(可能是所有)编译语言,如C ++,所以选择不使用-w不允许你节省很多打字,它只是让你在尝试运行脚本之前少思考(恕我直言) )。

-v是详细模式,不会更改脚本的运行(不会引发警告,也不会在新位置停止脚本)。 几个站点和讨论调用-w verbose模式,但-w是警告模式,它会更改脚本的执行。

它被称为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的效果放入脚本本身。

尽管shebang行的执行行为不会直接转换为Windows世界,但该行中包含的标志(例如问题中的-w )确实会影响正在运行的Ruby脚本。

Windows机器上的示例1:

 #!/usr/local/bin/ruby -w puts $VERBOSE # true 

Windows机器上的示例2:

 #!/usr/local/bin/ruby puts $VERBOSE # false