2012-10-23 32 views
4

我發現以下內容: http://www.basic-converter.org/stable/bacon.bash將Bash腳本轉換爲C.可能嗎?

是這樣一種從bash轉換爲c的方式嗎?

原因:是C那麼快BASH?我想運行一些東西,而不是一個cron作業。

+0

您肯定可以從C運行bash腳本。由於bash是一種非常簡單的語言,因此可以手動將其轉換爲C. – JavaCake

+0

你有沒有試圖做到這一點的非學術原因?或者它只是你的興趣? – Mike

+0

假設* bash *是用C編寫的,一個假設的轉換工具可以打印出* bash *的大部分源代碼,並傳遞一個硬編碼參數給它。我真的不相信你可以用bash語言編寫可靠的bash-to-C轉換器! – anatolyg

回答

3

這是可能的,問題是什麼是這樣做的目標。他們可能是一個子集:

  1. 速度解釋腳本可以慢
  2. 可維護性或許你有一個具有以C
  3. 靈活性腳本顯示限制更多的體驗時間有什麼可以用合理的努力
  4. 集成也許你已經有一個代碼庫,你願意緊密集成W¯¯實現第i個腳本
  5. 便攜

還有其他原因,如可擴展性,效率,而且可能更多。

基於「轉換」的目標,也有相當多的方式來實現一個等價的C,不同的是將「原生」的代碼量。作爲一個例子,我們可以考慮兩個極端。

一個極端是,我們必須執行主要是作爲慶典會,所以原來劇本的每一行會產生代碼相當於叉/ EXEC /等待系統調用,其中的變化將主要是執行當量編譯的C代碼到通配符擴展,從環境變量檢索值的,處理叉形過程的同步,並且也處理管道與適當的系統調用。

注意,這個「簡單」的轉換已經噸的工作,這將可能不僅僅是書面方式另一個shell解釋更糟。此外,它不符合上述許多目標,因爲便攜明智的,它可能仍然依賴於操作系統的系統調用和性能明智的,唯一的收穫是從最初的解析命令行。

在另一個極端,我們有在多個C的方式完全重寫。這將使用C條件句,lscdrm命令到它們各自的系統調用和可能與相應的庫替換字符串處理替換所有條件語句。

這可能是實現某些目標的更好,但成本可能會比其他方式更大,也消除了大量代碼複用的,因爲你必須要實現的功能等同於簡單的命令。

至於這個自動化,我也不認識任何一個工具,如果有任何他們可能沒有廣泛使用,因爲轉換擊到C或C Bash是不是可能是個好主意。如果出現這種需求,這可能是一個設計問題的徵兆,因此重新設計可能是更好的解決方案。編程語言和腳本語言是不同的工作不同的工具,即使有什麼之間可以跟他們做相交的區域。在一般情況下,

Don't script in C, and don't code in Bash 

最好是知道如何以及何時使用你的工具,然後找一個普通的通用工具(亦稱有沒有這樣的事情靈丹)。

我希望這有助於有點=)

+1

水瓶座鏈接不再可用。 – Yokai

4

我敢肯定有人做了一個工具,只是因爲他們可以,但我還沒有看到一個。如果你需要運行從C代碼bash腳本,它可以通過(例如)系統調用只需直接執行它:

system("if [ -f /var/log/mail ]; then echo \"you've got mail! (file)\"; fi"); 

除此之外,我不知道一個簡單的方法來「自動「執行。作爲人類,我們可以看看上面的內容並將其等同於:

if(access("/var/log/mail", F_OK) != -1) 
    printf("you've got mail! (file)"); 

作爲可以實現的十幾種方法之一。所以手動操作非常容易,顯然這需要花費更多的精力來做,可以被認爲是bash-> C編譯器自動完成的工作。

那麼有可能嗎?當然!
例子?抱歉,沒有。