Chcete-li spustit skript shellu 'file.sh':
sh file.sh
bash file.sh
Další možností je nastavit oprávnění ke spuštění pomocí příkazu chmod:
chmod +x file.sh
Nyní spusťte soubor .sh následovně:
./file.sh
Chcete-li spustit nespustitelný soubor sh
skript, použijte:
sh myscript
Chcete-li spustit nespustitelný soubor bash
skript, použijte:
bash myscript
Spuštění spustitelného souboru (což je jakýkoli soubor s oprávněním ke spuštění); stačí jej zadat jeho cestou:
/foo/bar
/bin/bar
./bar
Chcete-li, aby byl skript spustitelný, udělte mu potřebná oprávnění:
chmod +x bar
./bar
Když je soubor spustitelný, jádro je zodpovědný za to, jak to provést. U nebinárních souborů se to provede pohledem na první řádek souboru. Měl by obsahovat hashbang
:
#! /usr/bin/env bash
Hashbang říká jádru, jaký program má spustit (v tomto případě příkaz /usr/bin/env
je spuštěn s argumentem bash
). Poté je skript předán programu (jako druhý argument) spolu se všemi argumenty, které jste skriptu zadali jako následující argumenty.
To znamená, že každý spustitelný skript by měl mít hashbang . Pokud ne, neříkáte jádru, co to je je , a proto jádro neví, jaký program použít k jeho interpretaci. Může to být bash
, perl
, python
, sh
, nebo něco jiného. (Ve skutečnosti jádro často používá výchozí shell uživatele k interpretaci souboru, což je velmi nebezpečné, protože to nemusí být vůbec správný interpret nebo může být schopno analyzovat některé z nich, ale s jemnými rozdíly v chování, jako je např. případ mezi sh
a bash
).
Poznámka k /usr/bin/env
Nejčastěji uvidíte hash bang takto:
#!/bin/bash
Výsledkem je, že jádro spustí program /bin/bash
interpretovat scénář. Bohužel bash
není vždy dodáván ve výchozím nastavení a není vždy dostupný v /bin
. Zatímco na počítačích Linux to obvykle je, existuje řada dalších počítačů POSIX, kde bash
dodává na různých místech, například /usr/xpg/bin/bash
nebo /usr/local/bin/bash
.
Při psaní přenosného bash skriptu se proto nemůžeme spoléhat na pevné kódování umístění bash
program. POSIX již má mechanismus, jak se s tím vypořádat:PATH
. Myšlenka je taková, že nainstalujete své programy do jednoho z adresářů, které jsou v PATH
a systém by měl být schopen najít váš program, když jej chcete spustit podle názvu.
Bohužel nemůžete stačí udělat toto:
#!bash
Jádro neprovede (někteří možná) PATH
hledat tě. Existuje program, který umí PATH
vyhledat vás, nazývá se to env
. Naštěstí téměř všechny systémy mají env
program nainstalovaný v /usr/bin
. Začneme tedy env
pomocí pevně zakódované cesty, která pak provede PATH
vyhledejte bash
a spustí jej, aby mohl interpretovat váš skript:
#!/usr/bin/env bash
Tento přístup má jednu nevýhodu:Podle POSIX může mít hashbang jeden argument . V tomto případě použijeme bash
jako argument pro env
program. To znamená, že nám nezbývá místo pro předání argumentů do bash
. Takže neexistuje způsob, jak převést něco jako #!/bin/bash -exu
k tomuto schématu. Budete muset zadat set -exu
místo toho po hashbang.
Tento přístup má také další výhodu:Některé systémy mohou být dodávány s /bin/bash
, ale uživateli se to nemusí líbit, může se mu zdát chybný nebo zastaralý a možná si nainstaloval vlastní bash
někde jinde. To je často případ OS X (Mac), kde Apple dodává zastaralý /bin/bash
a uživatelé si nainstalují aktuální /usr/local/bin/bash
pomocí něčeho jako Homebrew. Když použijete env
přístup, který dělá PATH
vyhledávání, vezmete v úvahu preference uživatele a použijete jeho preferovaný bash před tím, se kterým jeho systém dodal.
Pro bourne shell:
sh myscript.sh
Pro bash:
bash myscript.sh