你知道是否有編譯bash腳本的工具嗎?shell腳本的編譯器
只要能夠編譯翻譯結果,那麼該工具是否僅僅是翻譯器(例如,將bash腳本轉換爲C程序的東西)並不重要。
我正在尋找類似shc的東西(這只是一個例子 - 我知道shc不能用作編譯器)。還有其他類似的工具嗎?
你知道是否有編譯bash腳本的工具嗎?shell腳本的編譯器
只要能夠編譯翻譯結果,那麼該工具是否僅僅是翻譯器(例如,將bash腳本轉換爲C程序的東西)並不重要。
我正在尋找類似shc的東西(這只是一個例子 - 我知道shc不能用作編譯器)。還有其他類似的工具嗎?
我不認爲你會找到任何東西,因爲你不能真正「編譯」一個shell腳本。你可以編寫一個簡單的腳本將所有行轉換爲system(3)
,然後「編譯」爲C程序,但這不會對性能產生重大影響,並且可能無法正確處理變量。不要這樣做。
「編譯」shell腳本的問題是shell腳本只是調用外部程序。
谷歌搜索引起CCsh,但它會讓你每臺機器$ 50許可證。
該文檔說CCsh將Bourne Shell(不是bash)腳本編譯爲C代碼,並且它瞭解如何複製50個奇數標準命令的功能,從而避免需要fork
這些命令。
但CCsh不是開源的,所以如果它沒有做你需要的(或者期望),你將無法查看源代碼來找出原因。
+1謝謝!我不知道CCsh。 – mfriedman 2009-08-19 01:53:00
這個程序看起來很有趣,但它確實提出了「你想完成什麼?」的問題,我應該在我的答案中提出這個問題。如果這看起來像你想要的,更好的選擇可能是用另一種語言重寫bash腳本(如果你絕對需要速度,則爲C;如果需要速度和內置功能之間的良好平衡,則爲C++,如果是唯一的Perl/Python你真正需要的性能提高並不是爲每個命令分配等) – 2009-08-19 02:06:34
他們在網站上沒有價格,但要求他們聯繫以要求他們提供報價。此外,分發生成的二進制文件是免費的。 – 2009-08-21 18:17:28
從理論上講,你實際上可以獲得很好的性能提升。
認爲所有的
if [ x"$MYVAR" == x"TheResult" ]; then echo "TheResult Happened" fi
的(測試的音符調用,然後回聲,以及口譯工作需要去做。)
這可以通過
if (!strcmp(myvar, "TheResult")) printf("TheResult Happened");
被替換
在C:沒有進程啓動,不必進行路徑搜索。很多善良。
實際上,至少在bash上面的行'if [x「$ MYVAR」== x「TheResult」];那麼echo「發生的結果」fi''根本不會調用任何外部命令,因爲測試和回聲都是bash內建的。所以不會發生分叉,因此,從編譯到C的性能提升不會像上面所提出的那麼大。 – 2010-03-10 12:24:37
Shell腳本可以做的不僅僅是運行外部程序。你可以做循環,並分配和比較變量以及其他東西。而且,許多shell在內部實現了一些更常用的命令,因此它們不必調用外部程序來運行它們。 – pib 2010-10-23 06:19:09