2015-09-04 54 views
0

我已经编译和测试了我的机器的开源命令行SIP客户机,我们可以假设它具有与我们商店中所有其他机器相同的架构。我的意思是说,我已经成功地将编译好的二进制文件传给了其他人,并且他们能够使用它们。如何封装一个编译的命令行工具以用于Ruby?

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

(sleep 3; echo "# 1"; sleep 3; echo h) | pjsua sip:[email protected] --flag_1 val --flag_2 val 

注意,领先的bash脚本是程序的运作和的一个重要组成部分该线本身似乎是最佳使用方法。

在我的问题的框架我正在考虑以下几点:

  1. 我不认为我能想到很多人在店 编译的二进制文件本身

  2. 有一个常见的系统体系结构在商店中,认为回购可以容纳最新版本是合理的

  3. 有一种使用Ruby调用工具的方法将是最有用的,他最容易接近的人大多是 。

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

    1. 呼叫
    2. 等待三秒钟
    3. 按1
    4. 等待三秒钟
    5. 挂断
  5. 可能有多达十几个标志。可能是一个配置文件。

是否合理的做法是创建一个gem,该gem的核心是一个先前编译过的命令行工具?

+0

[rhodes](https://github.com/rhomobile/rhodes)是一个框架,它似乎包含几种不同平台体系结构的编译版本的软件。 –

+0

[redis-rb](https:// github。com/redis/redis-rb)似乎需要在使用前独立安装redis。 –

回答

0

所以看起来我缺少的词汇是扩展名。 Here是一个关于在Ruby Gem中封装Ruby C扩展的很好的堆栈讨论。

这是一个link宝石指南创建宝石扩展。

显然,它不仅完成了,而且还有围绕其使用的最佳实践集。

1

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

+0

抱歉,为了清晰起见,我修改了该问题。前导bash脚本,即'(sleep 3; echo“#1”; sleep 3; echo h)'也需要可扩展。可能有多达十几个标志,甚至可能还有配置文件(所有的rubists都倾向于使用.yml文件)。 –

+0

啊,那么我的第二个建议似乎是要走的路。创建一个使用'system()'的模块并从.yml文件中提取选项。 – muirbot

+0

这是一个合理的建议,但本质上这个产品被共享是非常复杂的。问题不在于“最简单的方法是什么?”。问题是“创建一个以其编译的命令行工具为核心的gem是否是合理的做法?” –