Jaký je rozdíl mezi #!/bin/sh a #!/bin/bash ?
sh může obsluhovat v každé linux. distribuci něco jiného.
Jednoduše řečeno
sh je jen definice standardu (POSIX). Je jich více implementací (
dash,
ksh, atd.) A ty musí ten standard bezpodmíněčně dodržovat. Každý si pak přidá něco malinko navíc.
Bash musí ten standard také dodržovat, ale přidává hodně komfortu navíc. Skripty psané v
bashi jsou přenositelné jen v
bash. Kdežto psané ve standardu
sh (není to moc jednoduché a kolikrát i "nemožné") by měli být přenositelné všude.
sh se v některých systémech používá kvůli velikosti. Oproti
bash je o řád a něco menší. Zkus si zadat do terminálu
file -h /bin/sh
A zjistíš co ti implementuje
sh standard. V debian světě je to
dash, pokud jsi to cíleně nezměnil. A pak zadej
wc -c /bin/sh
a uvidíš velikost. Pak zkus
wc -c /bin/bash
a to je sakra rozdíl. Mimochodem v
Alpine je
sh link na
busybox, v
Archu na
bash a ve
Voidu mám za to že je
ksh (laptop s tímto systémem dostal potomek tak momentálně nemůžu přesně určit). Alpine ani Void nemají bash v základu nainstalovaný! Teď mě došlo, že vlastně ani
Ubuntu pokud se udělá minimální instalace přes debootstrap nemá bash.
sh se hodí jen na skriptování! Pracovat s ním interaktivně je masochismus nejtvrdšího zrna. Můžeš odzkoušet tím že v terminálu zadáš
sh
nebo
dash
anebo
bash --posix
. Vyskočit z toho jde klávesovou zkratkou
ctrl+d