如何包装已编译的命令行工具以便在 Ruby 中使用?

How do I wrap a compiled command line tool for use in Ruby?

我已经为我的机器编译并测试了一个开源命令行 SIP 客户端,我们可以假设它与我们商店中的所有其他机器具有相同的体系结构。我的意思是我已经成功地将编译后的二进制文件传递给商店中的其他人并且他们能够使用它们。

该工具有一个相当深奥的调用,一个简单的 bash 脚本在执行之前通过管道传输给它,如下所示:

(sleep 3; echo "# 1"; sleep 3; echo h) | pjsua sip:somephonenumber@ip --flag_1 val --flag_2 val

请注意,前导 bash 脚本是程序运行的重要组成部分,该行本身似乎是使用的最佳实践。

在我的问题框架中,我考虑了以下几点:

  1. 我不认为我可以指望店里的很多人 自己编译二进制文件

  2. 商店中有一个通用的系统架构,因此认为 repo 可以容纳最新版本是合理的

  3. 有一种使用 Ruby 调用该工具的方法将是最有用和最容易访问的 大多数人。

  4. 正在传递的前导 bash 脚本需要完全可扩展。这些表示可修改 "scenarios" 例如在这种情况下:

    1. 致电
    2. 等三秒
    3. 按 1
    4. 等三秒
    5. 挂断电话
  5. 可能有十几个旗帜。可能是配置文件。

创建一个 gem 的核心是一个以前编译过的命令行工具是否合理?

创建一个使用命令行工具的 gem 似乎是合理的。我唯一要说的是使用 system('which psjua') 检查命令是否可用,如果尚未安装则引发信息性错误。

看来我缺少的词汇是扩展。 Here 是关于在 Ruby Gem.

中包装 Ruby C 扩展的精彩堆栈讨论

这里是 link Gem 使用扩展创建 Gem 的指南。

显然它不仅已经完成,而且围绕它的使用有一套最佳实践。