“有什么用?”/usr/local/bin/ruby-w“;在ruby程序开始时

“有什么用?”/usr/local/bin/ruby-w“;在ruby程序开始时,ruby,shebang,Ruby,Shebang,在ruby程序开始时编写以下命令有什么用 #!/usr/local/bin/ruby -w 它是特定于操作系统的命令吗?它对ruby on windows有效吗?如果不是,那么windows中的等效命令是什么?它被称为。它告诉程序加载器要使用什么命令来执行文件。因此,当您运行/myscript.rb时,它实际上转换为/usr/local/bin/ruby-w./myscript.rb Windows使用文件关联的目的相同;舍邦线没有效果(编辑:见FMc的答案),但也不会造成伤害 一种便携式方式

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

#!/usr/local/bin/ruby -w
它是特定于操作系统的命令吗?它对ruby on windows有效吗?如果不是,那么windows中的等效命令是什么?

它被称为。它告诉程序加载器要使用什么命令来执行文件。因此,当您运行
/myscript.rb
时,它实际上转换为
/usr/local/bin/ruby-w./myscript.rb

Windows使用文件关联的目的相同;舍邦线没有效果(编辑:见FMc的答案),但也不会造成伤害

一种便携式方式(例如,在Cygwin和下工作)是:

#!/usr/bin/env ruby
这将使用命令找出Ruby解释器的位置,并运行它


编辑:显然,Cygwin会在
/usr/bin/env ruby-w
中表现不好,并尝试查找
ruby-w
,而不是
ruby
。您可能希望将
-w
的效果放入脚本本身。

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

示例1在Windows计算机上:

#!/usr/local/bin/ruby -w
puts $VERBOSE   # true
#!/usr/local/bin/ruby
puts $VERBOSE   # false
示例2在Windows计算机上:

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

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

Shebang行根本不是ruby(除非您想将其称为ruby注释)。它实际上是shell脚本。大多数linux和unix用户都在运行BashShell(代表shell),但几乎每个操作系统都有一个命令解释器来支持Shebang

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

“她”部分是octothorp(#),又名磅符号、数字符号、散列标记,现在是散列标记(我仍然称之为tic-tac-toe-just-cuz)

“砰”的部分是感叹号(!),这就像用拳头敲击桌子来感叹命令一样

在Windows上,“Shell”是命令提示符,但即使没有黑色DOS窗口,命令解释器也会根据文件关联运行脚本。如果命令解释器或编程语言正在读取shebang并确保标记得到尊重,这并不重要,重要的是,它们得到了尊重

“-w”是一面旗帜。基本上,这是ruby在运行脚本时要遵循的指令。在本例中“-w”打开警告,因此在脚本执行过程中会出现额外的警告(脚本继续运行)或错误(脚本停止运行)。在程序执行期间,可以捕获警告和异常并对其进行处理。这些帮助程序员发现导致意外行为的问题

我喜欢用快速而肮脏的脚本来完成一项工作,所以不要。我也是高质量可重用编码的粉丝,所以一定要使用-w。适用于正确工作的正确工具。如果你在学习,那么一定要使用-w。当你知道自己在做什么,并停止在快速任务中使用-w时,你就会开始意识到使用-w而不是花几个小时解决问题会有什么帮助。(提示,当问题的原因不是很明显时,只需添加-w并运行它即可查看结果)

“-w”需要一些额外的编码来让ruby明白您的意思,因此它不会立即解决问题,但是如果您已经使用-w编写了代码,那么添加必要的位以使小脚本运行时带有警告就不会有太多问题。事实上,如果您习惯于使用-w,那么您可能已经以这种方式编写了代码,并且-w不会改变任何东西,除非您忘记了什么。Ruby需要的远不如“管道代码”,然后大部分(也许全部)编译的语言,如C++,所以选择不使用-W不允许你节省很多的打字,它只是让你在尝试运行脚本之前想得更少。
-v是详细模式,不会更改脚本的运行(不会引发警告,也不会在新位置停止脚本)。一些站点和讨论调用-w verbose模式,但是-w是警告模式,它会更改脚本的执行。

我认为-w指的是启用verbose模式或只是启用错误报告。自从#/usr/local/bin/ruby-w对于windows没有任何意义,对于文件关联,我们需要在程序的开头添加任何语句吗?对于windows,只需将
.rb
文件与ruby可执行文件关联,无论在何处。说shebang行对windows没有影响并不完全正确。请看我的答案中的一个例子。如果你没有说这句话,我会有一种印象,认为舍邦线是不需要的。谢谢你的例子。这是一个很好的答案。但是这个答案忘了提到一件事,这在这里也很重要。我不确定问这个问题是否相关,但是你能告诉我详细全局变量的作用吗?@simminni如果你运行
ruby-h
,你会得到一个基本(但不是很有帮助)的答案:
-w
标志将“为您的脚本打开警告”。有关更多内容,请参阅本文:。我的建议:如果您的脚本依赖于具有特定值的
$VERBOSE
,请在脚本中显式设置它(不要依赖shebang行标志)。感谢您对
-w
标志的详细解释!