【问题标题】:Running a ruby script globally全局运行 ruby​​ 脚本
【发布时间】:2014-11-16 15:41:17
【问题描述】:

我正在用 ruby​​ 编写一个命令行应用程序,并希望在我的 shell 中全局运行它,而不必在我的调用前加上 ./ruby <filepath> - 就像我会运行 git、@987654324 @ 或rails

我的简单应用程序的结构如下:我在/Developer 文件夹中有一个名为rubyPlug 的目录。 rubyPlug 内部是 plugFormulae.rb

我正在用 ruby​​ 编写一个命令行应用程序,并希望在我的 shell 中全局运行它,而不必在我的调用前加上 ./ruby <filepath> - 就像我会运行 git、@987654331 @ 或rails

我的简单应用程序的结构如下:我在/Developer 中有一个名为rubyPlug 的目录。 rubyPlug 内部是 plugFormulae.rbFormulae.rb 是所有应用程序特定代码的存储位置。 Plug 存储了一些样板启动代码:

!/usr/bin/env ruby 
require  "/Users/theideasmith/Developer/rubyPlug/Formulae.rb"
 begin
   x = Application.new ARGV
 rescue Errno::ENOENT => err
   abort "plug: #{err.message}"
 end```

我想通过输入 plug <args> 来运行我的应用程序。如果我在全局范围内存储plug,我将如何构建我的require() 调用?

我已将#!/usr/bin/env ruby 包含在plug 中,运行chmod +x plug,并尝试sudo cp plug /usr/bin/plug. 我的脚本运行,但在require "/Users/.../Formulae.rb" 调用中失败。我该如何避免这种情况 - 我是否必须将父目录作为某种包存储在 /usr/bin 中?我已将#!/usr/bin/env ruby 包含在plug 中,运行chmod +x plug,并尝试sudo cp plug /usr/local/bin/plug。然后我可以输入plug <args>,但随后我收到一条与我的require 呼叫不起作用有关的错误消息。

有什么建议吗?

【问题讨论】:

  • 为什么你的路径没有前导斜杠?这是 Mac OS 的事情吗?

标签: ruby command-line global


【解决方案1】:

require 如果您使用绝对路径,即以/ 开头的路径,则应该可以工作。您还可以使用Dir.chdir 使脚本运行,就好像它不在/usr/bin 中一样。

另外你真的应该把它放在/usr/local/bin。这是自定义可执行文件的合适位置。

【讨论】:

    猜你喜欢
    • 2012-01-06
    • 1970-01-01
    • 2020-10-03
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多