2009-08-19 2 views
6

Знаете ли вы, есть ли инструмент для компиляции сценариев bash?Компиляторы для сценариев оболочки

Не имеет значения, является ли этот инструмент просто переводчиком (например, что-то, что преобразует скрипт bash в программу на C), если переводный результат может быть скомпилирован.

Я ищу что-то вроде shc (это просто пример - я знаю, что shc не работает как компилятор). Есть ли другие подобные инструменты?

ответ

1

Я не думаю, что вы найдете что-нибудь, потому что вы не можете «скомпилировать» сценарий оболочки. Вы можете написать простой скрипт, который преобразует все строки в вызовы system(3), а затем «скомпилирует» это как программу на C, но это не будет иметь большого повышения производительности по сравнению с тем, что вы сейчас используете, и может неправильно обрабатывать переменные. Не делай этого.

Проблема с «компиляцией» сценария оболочки заключается в том, что скрипты оболочки просто вызывают внешние программы.

+1

Сценарии оболочки могут делать больше, чем просто запускать внешние программы. Вы можете делать циклы, назначать и сравнивать переменные, а также другие вещи. Кроме того, многие оболочки используют некоторые более общие команды внутри, поэтому им не нужно вызывать внешние программы для их запуска. – pib

6

Поиск в Google вызывает CCsh, но он вернет вам 50 долларов США за машину за лицензию.

В документации говорится, что CCsh компилирует сценарии Bourne Shell (не bash ...) на код C и что он понимает, как реплицировать функциональность из 50 нечетных стандартных команд, избегая необходимости в fork.

Но CCsh не является открытым исходным кодом, поэтому, если он не делает то, что вам нужно (или ожидайте), вы не сможете посмотреть исходный код, чтобы выяснить, почему.

+0

+1 Спасибо! Я не знал о CCsh. – mfriedman

+2

Эта программа выглядит довольно интересной, но она порождает вопрос «Что вы пытаетесь выполнить?», О котором я должен был задать в своем ответе. Если это похоже на то, что вы хотите, лучше сделать ставку на перезапись сценария bash на другом языке (C, если вам абсолютно нужна скорость, C++, если вам нужен хороший баланс между скоростью и встроенной функциональностью, Perl/Python, если только увеличение производительности, которое вам действительно нужно, не разветвляется для каждой команды и т. д.) –

+0

У них нет цены на веб-сайте, но попросите их связаться с ними, чтобы попросить их предоставить цитату. Кроме того, распределение результирующего двоичного кода бесплатное. –

0

В теории вы могли бы получить хороший прирост производительности.

Think всех

if [ x"$MYVAR" == x"TheResult" ]; then echo "TheResult Happened" fi 

в (примечание вызова теста, то эхо, а также устный перевод необходимо сделать.)

, который может быть заменен

if (!strcmp(myvar, "TheResult")) printf("TheResult Happened"); 

В C: нет запуска процесса, нет необходимости выполнять поиск пути. Много добра.

+1

Собственно, по крайней мере, в bash указанная строка 'if [x" $ MYVAR "== x" TheResult "]; то echo «TheResult Happened» fi' вообще не вызывает никакой внешней команды, так как оба теста и эха являются встроенными bash. Таким образом, никакого разветвления не происходит, и, следовательно, повышение производительности от компиляции до C не будет таким большим, как предлагается выше. – 2010-03-10 12:24:37

Смежные вопросы