Hlavní navigace

Úvod do skriptování v Linuxu II

Jakub Šťastný 6. 9. 2007

V minulém díle jsme se seznámili s tím, co to programování je a seznámili jsme se s nejznámějšími skriptovacími jazyky. Dnešní díl bude praktičtější – povíme si, jak vlastně skript vzniká, v čem se edituje i jak jej spouštět. Vše zakončíme krátkým FAQ o skriptování.

V čem se kód edituje?

Existují dvě hlavní možnosti editace zdrojového kódu – editace v IDE nebo v textovém editoru. Oba přístupy mají svá pro a proti – IDE je komplexní, obsahuje zpravidla všechny nástroje potřebné pro programování v daném jazyce, ale zase není zdaleka tolik univerzální, s rychlostí to v porovnání s editory také nebývá nikterak slavné a co se editačních schopností týče, tak za těmi nejlepšími editory zcela jasně snad jakékoliv IDE zaostává. IDE disponuje spoustou užitečných vlastností a určitě jej není vhodné opomínat, zejména v případě větších projektů. Na menší prográmky a běžné skripty se hodí spíše editor. Nejpopulárnější OSS editory jsou asi Vim, Emacs a Jedit, použít se však dají třeba defaultní editory Gnome a KDE, tedy Gedit a Kate.

IDE neboli integrované vývojové prostředí je komplexní nástroj určený pro editaci, sestavování a debugování (ladění) aplikace. IDE bývá úzce specializováno na konkrétní skupinu jazyků, programovací jazyk nebo dokonce pouze jen na některý jeho framework. Mezi nejznámnější OSS IDE patří bezesporu Eclipse, dále NetBeans, KDevelop, Anjuta a další.

Jak udělat kód spustitelný?

V nejjednodušší variantě lze použít prosté uložení do textového souboru a spuštění příkazem <binarka_interpretu> <cesta ke skriptu>, tedy například bash ~/scripts/gencontent.sh, perl ../player.pl a podobně. I to se však dá vylepšit:

#!/bin/bash

Toto zaklínadlo uvedené na první řádce našeho skriptu explicitně definuje, že skript chceme spustit zmíněným interpretem, jímž je v našem případě /bin/bash. Povšimněte si toho, že tato řádka je zakomentovaná, není tedy určena interpretu, který ji ignoruje, ale operačnímu systému. Kromě znaku komentáře se přidává ještě znak vykřičníku jako symbol pro spuštění.

Protože v unixových systémech jsou pečlivě rozdělena práva určující, co kdo s určitým souborem může dělat, je možno zvolit, kdo bude daný skript moci spouštět. Kdo nemá právo na spuštění, skript nespustí, což je třeba mít na paměti, když vytváříme nový skript, protože většina editorů zdrojový kód pouze uloží, ale spustitelnost souboru neřeší.

chmod a+x my_script.rb

Tento příkaz přidá všem, tedy vlastníkovi, členům skupiny i ostatním uživatelům právo na spuštění skriptu my_script.rb. Chcete-li přidat právo na spuštění pouze sobě, použijte raději chmod u+x <script>. Odhalovávání dalších možností nechám na vás, man chmod poví více.

Nyní jej můžete jednoduše spustit pouhým udáním jeho cesty:

./mujscript.sh

Bohužel nic není tak úplně lehké, jak se na první pohled zdá. Bash sice lze na Linuxu najít téměř vždy ve složce /bin, ale když se podíváme k našim dalším unixovým sousedům, zjistíme, že pravidlem to rozhodně není. A co třeba když si ještě ke všemu vybereme jiný interpret, třeba Python. Jeho umístění není jasné rozhodně ani v jednotlivých distribucích Linuxu, o jiných unixových systémech ani nemluvě.

Dobrou pomůckou může být prográmek env, který naleznete snad ve všech linuxových distribucích ve složce /usr/bin. Env umí nalézt cestu k interpretu, tedy alespoň pokud je v $PATH. Když jej zavoláme a dáme mu za parametr náš vysněný interpret, bude tento interpret nalezen a systémem okamžitě použit pro zpracování našeho souboru:

#!/usr/bin/env python

Bohužel však i použití utilitky env má svá úskalí. Tak především i když jej lze nalézt na značné části unixových systémů, pravidlem to není a spoléhat na něj tedy nelze. Může se klidně stát, že žádný env v /usr/bin nebude. Nechávají-li vás však ostatní unixové systémy chladnými, na Linuxu si můžete být téměř jisti, že env v očekávané cestě naleznete.

Je zde však ještě jeden problém spojený s prográmkem env  – parametry. Dejme tomu, že budeme chtít spustit Perl v režimu vypisujícím varování, tedy s parametrem -w:

#!/usr/bin/perl -w

Tento zápis nám bez potíží projde. Zkusme nyní použít env:

#!/usr/bin/env perl -w

Celý pokus ovšem skončí chybovým hlášením:

/usr/bin/env: perl -w: No such file or directory

GNU env si prostě s parametry neporadí. Když už ale zmatek, tak pořádný – například BSD env s parametry pracovat dokáže.

FAQ

Můj systém nemá Bash v /bin, jenže většina skriptů jej právě tam hledá. Co s tím?

Nejjednodušší je vytvořit symlink bashe do adresáře /bin:

sudo ln -s `which bash` /bin/

Mohu spustit skript, ke kterému nemám oprávnění spuštění?

Fakticky ano, v tom případě pouze nebude fungovat spuštění uvedením pouhé cesty ke skriptu, ale bude třeba uvést ještě interpret, jak jsme si již ukazovali výše. Lze to udělat například takto:

bash script.sh
cat script.sh | bash
bash < script.sh

Druhá věc ovšem je, zda budete mít oprávnění ke všem akcím prováděným ve skriptu.

Našli jste v článku chybu?

6. 9. 2007 8:35

Dekuji za upozorneni, clanek je ale kompletni. Je prumerne dlouhy, ostatne zkuste porovnat s ostatnimi clanky zde.

10. 9. 2007 11:42

salam (neregistrovaný)
Samé cool hlášky :-)
Vitalia.cz: Dáte si jahody s plísní?

Dáte si jahody s plísní?

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Root.cz: Chytré hodinky Pebble úplně končí

Chytré hodinky Pebble úplně končí

Root.cz: Kamery Sony se dají ovládnout na dálku

Kamery Sony se dají ovládnout na dálku

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

DigiZone.cz: NG natáčí v Praze seriál o Einsteinovi

NG natáčí v Praze seriál o Einsteinovi

120na80.cz: Jak oddálit Alzheimera?

Jak oddálit Alzheimera?

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

Podnikatel.cz: Zavře krám u #EET Malá pokladna a Teeta?

Zavře krám u #EET Malá pokladna a Teeta?

Podnikatel.cz: Babiše přesvědčila 89letá podnikatelka?!

Babiše přesvědčila 89letá podnikatelka?!

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Vitalia.cz: Říká amoleta - a myslí palačinka

Říká amoleta - a myslí palačinka

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Vitalia.cz: Znáte „černý detox“? Ani to nezkoušejte

Znáte „černý detox“? Ani to nezkoušejte

Root.cz: Vypadl Google a rozbilo se toho hodně

Vypadl Google a rozbilo se toho hodně

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...