【问题标题】:Ruby on Windows: Require is not recognized as an internal or external commandWindows 上的 Ruby:Require 未被识别为内部或外部命令
【发布时间】:2019-02-22 10:36:09
【问题描述】:

我正在尝试使用 Guard 来监控 AsciiDoctor 文件中的更改。这是官方文档中的 Guardfile

require 'asciidoctor'

guard 'shell' do
  watch(/^mydoc\.adoc$/) {|m|
    Asciidoctor.convert_file m[0]
  }
end

它对我有用。但现在,我尝试在不创建 Guardfile 的情况下启动相同的操作 - 即我只想在 Windows cmd.exe 中编写这些命令。

但是当我写require 'asciidoctor' 命令提示符给我一个错误:

'require' 不是内部或外部命令、可运行程序或批处理文件。

好吧,我知道此类错误消息通常与 Windows %Path% 环境变量有关。但我不明白如何在这种特殊情况下解决它。

【问题讨论】:

    标签: ruby windows cmd guard asciidoctor


    【解决方案1】:

    Ruby 和 DOS Batch 是两种完全不同的编程语言,彼此完全没有关系。您根本不能指望 DOS Batch 的解释器能够运行 Ruby 代码,反之亦然。 (特别是考虑到在编写CMD.EXE 时Ruby 还不存在,那么CMD.EXE 怎么可能知道如何解释Ruby 代码?)

    您需要在 Ruby 解释器中运行 Ruby 代码(或使用 Ruby 编译器将其编译为您拥有解释器的东西)。

    【讨论】:

    • 谢谢。我明白了,我的问题有很多反对意见,所以我应该注意我已经知道我不能简单地在命令提示符下运行require。实际的问题是我不明白运行这个require 的正确方法是什么。具体步骤是什么?
    • 这是 Ruby 代码。您需要在 Ruby 解释器中运行它。
    • 实际上,更准确地说:这是一个名为guard 的Ruby gem 的DSL。您需要使用 Guard 运行它,因为 Kernel#guard 方法是由 Guard gem 提供的,它不是 Ruby 核心库的一部分。
    • “您需要在 Ruby 解释器中运行它” - 好吧,我尝试在我的 Ruby 目录中启动 ruby.exe require 'asciidoctor',但它不起作用。我认为 ruby​​.exe 实际上是一个解释器,但它可能不正确? “实际上,更准确地说......” - 所以,简单来说,如果没有物理创建 Guardfile,我就无法运行 Guard for AsciiDoctor?
    • 像几乎所有解释器(包括CMD.EXE)一样,Ruby 解释器从标准输入获取输入,而不是作为命令行参数。我对 Guard 不够熟悉,无法回答您的问题,您必须查看文档。
    猜你喜欢
    • 2018-04-24
    • 2017-06-29
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 2020-04-19
    • 2017-11-13
    相关资源
    最近更新 更多