Úvod do skriptování v Linuxu II

6. 9. 2007
Doba čtení: 4 minuty

Sdílet

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í?

bitcoin_skoleni

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.

Autor článku

Jakub Šťastný byl v letech 2007 až 2008 redaktorem serveru Root.cz. Mezi jeho zájmy patří Linux, programování a typografický systém TeX.