ruby - 如何像常规命令一样从任何地方制作一个 Ruby 文件(在 gem 中)可执行文件?

标签 ruby linux command-line-interface

我的 gem 中有一个命令:bin/tennis。目前要执行它,您必须 cd 进入 gem 并运行 bin/tennis。我想知道是否可以让它像普通的 shell 命令一样工作?即能够从任何目录运行它。

最佳答案

任何全局可执行的内容都位于 $PATH 变量(Windows 上为 %PATH%)的目录之一下。

例如,$PATH 可能如下所示:

$ echo $PATH
/usr/local/opt/rbenv/shims:/Users/casraf/bin:/Users/casraf/bin:/usr/local/heroku/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/opt/fzf/bin

您可以将目录添加到此列表,以 : 分隔,并且在全局执行命令时将查看这些路径中的每一个。

所以你可以:

  1. 在 gem exec 目录中保存可执行文件的副本:

    ln -s/your/bin/file $(ruby -rubygems -e 'puts Gem.dir')

    这将在常规 gem 可执行目录中创建一个指向您的 bin 的符号链接(symbolic link)(它应该已经在您的 $PATH 中,如果没有,只需添加它:

    export PATH=$(ruby -rubygems -e 'puts Gem.dir'):$PATH

    您可以将其放入您的 .bashrc.bash_profile 以确保它在每个终端 session 中发生(如果您有非标准设置,您可能需要找到另一个文件来放入)

  2. 或者只是将常规路径添加到您的 PATH 变量:

    PATH=/path/to/gem/bin:$PATH

关于ruby - 如何像常规命令一样从任何地方制作一个 Ruby 文件(在 gem 中)可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43845157/

相关文章:

ruby - 你如何在运行时检查 Ruby 中的 Gem 版本?

ruby - 将 Shell 脚本转换为 ruby​​ 中的数组

linux - 在linux中打印 "="之后的值

linux - 将用户添加到 sudoer 文件有什么作用?

go - Nmap给出错误消息“您正在运行不建议使用的选项”

ruby-on-rails - 设计无法完成 session Controller 功能的管理模型

ruby-on-rails - Rails,在尝试使用 put http 方法的表单中出现问题

java - Linux 康普顿 : How to Remove Window Shadow for Undecorated JFrame

command-line-interface - 在 fzf 中显示结果之前和之后的行

go - 为 CLI 应用程序实现自动完成