Portál AbcLinuxu, 11. května 2025 04:49
Jaky je rozdil mezi tim, kdyz bash skript spustim pomoci sh skript nebo ./skript? Vi nekdo?
sh skript
interpretuje skript (kdo co) sh a skript nemusí mít executable flag ani shebang, při spuštění přes ./skript může (koho co) skript interpretovat i jiný program, pokud je uveden v direktivě hashbang #! direktivě (vizte google shebang) a skript musí mít executable flag.
./
, není to nic kriptického, jde o to že většinou nemáte (z dobrých důvodů) aktuální adresář v proměnné PATH
, kde bývají cesty k adresářům se spustitelnými soubory a v případě napsání "skript
" se v nich skript hledá. Skript nalézající se v aktuálním adresáři je tedy třeba uvést nějakou cestou k němu, aby bylo jasné, že nechcete hledat skript v PATH, ale chcete spustit nějaký konkrétní skript např. /home/user/bin/skript nebo pokud jste v home tak bin/skript nebo pokud jste v bin tak napíšte co... no ./skript. Nebo třeba ../bin/skript či ../bin/tmp/../skript to už je celkem jedno.
./
, není to nic kryptického, jde o to že většinou nemáte (z dobrých důvodů) aktuální adresář v proměnné PATH
, kde bývají cesty k adresářům se spustitelnými soubory a v případě napsání "skript
" se v nich skript hledá. Skript nalézající se v aktuálním adresáři je tedy třeba uvést nějakou cestou k němu, aby bylo jasné, že nechcete hledat skript v PATH, ale chcete spustit nějaký konkrétní skript např. /home/user/bin/skript nebo pokud jste v home tak bin/skript nebo pokud jste v bin tak napíšte co... no ./skript. Nebo třeba ../bin/skript či ../bin/tmp/../skript to už je celkem jedno.
Ještě bych doplnil, že /bin/sh
bývá většinou (symbolický) odkaz např. na /bin/bash
, u mého Kubuntu je to odkaz na /bin/dash
.
Potom je rozdíl např. mezi "bash skript
" a "sh skript"
, i přestože třeba /bin/sh
je symbolický odkaz na /bin/bash
. Pokud skirpt spustíte jako "sh skript", tak se např. Bash přepne do "kompatibilního módu" (POSIX).
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.