Skrypty powłoki mają tą przewagę nad programami pisanymi w klasycznych językach programowania, że nie trzeba ich kompilować. Czasami jednak zachodzi taka konieczność, wtedy pomocą służy nam mały program – shc.

Opis działania shc

Działanie programu polega na zamianie skryptu na program w języku C a następnie skompilowaniu go. Kompilacja skryptów bash najczęściej jest używana w przypadku konieczności ukrycie hasła, które musimy umieścić w skrypcie, dzięki czemu użytkownik może nawet nie zauważyć, że do wykonania polecenia niezbędne jest jakiekolwiek hasło. Ponadto jest dobrym zabezpieczeniem przed analizą naszych skryptów na maszynie do której dostęp ma wielu użytkowników.

Programu tego można użyć również podczas zajęć dydaktycznych ze skryptów powłoki, gdy chcemy pokazać szkolonym osobom sposób działania jakiegoś mechanizmu nie dając jednocześnie możliwości wglądu w źródła. Dzięki opcji “-e” pozwala na ograniczenie czasowe wykorzystania skompilowanego programu, gdy chcemy zademonstrować skrypt potencjalnemu klientowi.

Instalacja shc

Program ten znajduje się w repozytoriach niektórych dystrybucji, można go też pobrać ze strony autora datsi.fi.upm.es/~frosal/ i samodzielnie skompilować (informacje na ten temat można znaleźć w pliku shc.README zawartym w paczce programu).

Program wywołujemy poleceniem

"shc -f skrypt"

Powstają dwa pliki

  • skrypt.x.c, który jest konwersją skryptu na język C
  • skrypt.x który jest plikiem binarnym.

Kompilator ten nie ma problemów z kompilowaniem nawet bardziej rozbudowanych skryptów bash. Należy jedynie pamiętać, że aby działał poprawnie musi mieć dostęp do wszystkich przywoływanych podprogramów.

  • Razi

    Kodzik C ładnie generuje :) Nie da się go tak szybko rozczytać jak sądziłem, ale znając algorytm to się da.

  • Greg

    Może i przydatne, ale jak na konkursowy artykuł to słabo :)

    • xeno

      Mi tam sie podoba.
      Prosty, zwiezly, na temat, bez sztucznego pompowania.
      Ja dalbym 40 punktow. Ciekawe jak ocenili redaktorzy.
      Ale poczekajmy na inne artykuly.

    • Artur Głowacki

      Jeżeli ten dostał 40, to nie dziwię się, że inne mogą dostać 150 ;-)

    • xeno

      40 to duzo?
      To minimum, mniej sie nie da.
      Artykul zostal zaakceptowany to ma 40+bonus.
      Nie ma tresci odkrywczych, ale opisuje temat i podaje mniej znane spolecznosci przydatne narzedzie. Czego chciec wiecej?
      Jesli to byl konkurs na najlepszy artykul, to nie wynikalo to z ogloszenia.

  • Tomasz

    Spoko ale suabe.

    • Michał Wójcik

      Tak wygląda dzisiejsza krytyka od Polaczków. Obraz jej śliczny. Łatwo powiedzieć, że “suabe”, argumentów nie podając. Chętnie przeczytam Twój artykuł, jak i wszystkich krytykujących cudzą pracę. Porównam i ocenię. Wyciągnę wnioski, opiszę, dam autorowi rady jak może poprawić swój “suaby” artykuł.
      W opensource nie chodzi o to, żeby krytykować. Jeśli coś zrobisz nie tak – inni poprawią.
      Ale cóż. W naszym szarym kraju wolimy krytykować cudze, niż zachęcać do rozwoju.
      Parafrazując:
      Suaby Tw komęt.

  • mesiu84

    to shc to fajna rzecz, ale niestety jak pierwszy raz o nim usłyszałem to miał ogromne problemy z bibliotekami pod solarisem dlatego od kilku lat do niego nie zaglądałem :D

  • przyspiesza to coś wykonywanie skryptów? ktoś przeprowadził jakiś test?

    • arek

      Czas jest porównywalny (sprawdziłem koło 20 swoich skryptów), najbardziej zależy od czasu pracy wywoływanych podprogramów.

    • Piecia

      Wystarczy w Bashu używać wbudowanych poleceń i skrypt będzie szybko działał. Mi natomiast shc nie działał poprawnie, a że traktowałem jako ciekawostkę to nie przejmowałem się niedziałaniem.

    • Piecia

      Z ciekawości sprawdziłem ponownie: "skompilował" także skrypt perlowski. Przy bashu dostałem taki komunikat:
      shc opts=- : No real one. Removing opts
      Działa nie działa.