【问题标题】:How to run a Ruby script with terminal options如何使用终端选项运行 Ruby 脚本
【发布时间】:2012-12-23 22:46:03
【问题描述】:

我在 Ruby 中构建了一个名为 Vanilla 的 LaTeX 预处理器。它提供了一个名为vanilla 的命令行工具,它使用Optparse 来解析一些命令行选项。我使用OCRA gem 将其编译为exe,这仅在Windows 上有用。我想为 Mac 和可能的 Linux 做同样的事情。我知道 Mac 计算机附带 Ruby,您可以致电 ruby vanilla.rb some options 来实现我想要的。但我正在寻找一种本地方式,以便我可以在终端中执行vanilla some options。任何人都可以帮我找到任何关于实现这一目标的好教程吗?

【问题讨论】:

  • #!/bin/sh ruby​​ path/to/your/script.rb "$@" 或者你可以使用#!env ruby​​ - 就像这里的github.com/iron-io/iron_worker_ruby_ng/blob/master/bin/…
  • 我在我的 .rb 文件上添加了您的建议。但是当我尝试“vanilla.rb some option”时,我收到两条错误消息。 1. require:command not found 和 2. syntax error unexpected token `('。但是当我 cd 进入该目录并使用 ruby​​ vanilla.rb 一些选项运行 .rb 文件时,它工作得非常好。你知道这里有什么问题吗?
  • 如果你想采用第二种方法 - 你需要使用 #!/usr/bin/env ruby​​ - shebang 字符串告诉如何运行你的应用程序。
  • 我确实明白这一点。但我忘了从文件中删除 .rb 扩展名。这就是它抱怨的原因。但是我遇到了另一个错误。这次我在运行“vanilla some option”时收到“permission denied”错误。你怎么看这个?
  • 我成功了!感谢您的洞察力。

标签: ruby bash terminal


【解决方案1】:

在 Unix shell 中,可执行文件的名称在 PATH 环境变量指定的目录列表中查找。因此,如果您使脚本可执行并将其放在用户的 PATH 中的某个位置,他们将能够像任何其他实用程序一样运行它。

【讨论】:

  • 您好 Peter,我将目录添加到路径中,并且在重新加载我的 bash 配置文件后我能够访问 Vanilla.rb。我还在我的文件顶部添加了“冰”建议。但是,当我输入“vanilla.rb some option”时,我收到两条错误消息。 1. require:command not found 和 2. syntax error unexpected token `('。我检查了几个站点以找出这些错误消息的含义。但是我无法清楚地理解这些错误消息的含义。但是当我cd 进入该目录并使用 ruby​​ vanilla.rb 一些选项运行 .rb 文件,它工作得非常好。这里有什么问题?
  • 你把#!/bin/sh放在最上面了吗?试试#!/usr/bin/env ruby——这将运行Ruby解释器,而不是sh
  • 我只在顶部添加了 #!/usr/bin/env ruby​​,但我忘记删除 .rb 扩展名。所以这就是它抱怨的原因。但我遇到了另一个问题。如果我运行 vanilla 某个选项,我会收到“权限被拒绝”错误消息。
  • 使用ls -l vanilla.rb 检查您对文件的权限。如果您看到类似rwxr-xr-x 的内容,则一切正常——这意味着您可以读取、写入和执行文件,而其他人只能读取和执行。如果您没有看到,请尝试运行 chmod +x vanilla.rb。这将添加可执行权限。
【解决方案2】:

将脚本移动到项目目录中名为bin 的文件夹中,并从中删除.rb。在文件的顶部,输入#!/usr/bin/env ruby。大功告成!

【讨论】:

  • 我尝试了您的建议,但是当我运行“vanilla some option”时,它显示“Permission Denied”。这条消息是什么意思?
  • 运行chmod +x ./bin/vanilla
猜你喜欢
  • 2020-09-01
  • 2018-01-18
  • 2019-09-23
  • 1970-01-01
  • 2023-04-10
  • 2014-01-18
  • 2021-06-30
  • 1970-01-01
  • 2020-11-27
相关资源
最近更新 更多