2015-09-04 19 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是否是合理的做法?」 –