Portál AbcLinuxu, 20. května 2025 23:14
Aneb příběh o tom, jak dokáže inovace brzdit
Tak jsem nedávno řešil problém s mým bashovým skriptem. Že spustím příkaz v terminálu bez problémů, ale jako sh skript.sh už si ani neškrtnu jsem si zvyknul. Nejčastější problém je podmínka if, vždycky vypisuje chybu ať udělám snad cokoli. Ale už jsem se naučil jak ji napsat tak, aby neprotestovala (dost neefektivně).
Na(ne)štěstí jsem v posledním pokusu (smyčka while) potřeboval použít read -n 1....a nastaly problémy. Skript měl načíst jeden znak, rovnou podle case spustit přiřazený příkaz a znovu se ptát....a takhle dokola. Bohužel co se (ne)stalo - terminál se mi začal plnit hromadou textu o tom, že read -n 1 opravdu není to co chci a že to nebude fungovat.
Vydal jsem se na cestu a ptal se Google, který mi (jako vždy, stačí se umět ptát) odpověděl, kde je zakopaný.....silový vodič Ten, co mě silovým polem nutí přepisovat skripty. Ano přátelé.....byl to Dash! Díky svému výcviku jsem obratem v terminálu jako root napsal dpkg-reconfigure dash (snad jen tohle) a Dash poslal na dlouhou dobu pryč.
I začalo mi ale vrtat hlavou, proč se na prvních řádcích snad všech Bashových skriptů objevuje:
#!/bin/bash
#!/bin/env bash
....a možná i několik dalších alternativních zápisů. Proč píšu že chci Bash, když mi skript pořád běží přes Dash? To bych to tam skoro ani nemusel psát. Teď mě tak v polospánku napadá použít podmínku a pokud se skript pustí v Dashi, tak jen vypsat něco ve smyslu "tudy cesty nevede, spust mě tak a tak", případně zařídit aby při běhu v Dashi sám sebe znova spustil v Bashi....otázka je, jestli se dřív něco nezacyklí a nevznikne vidličková bomba. Nemluvě o tom, že se jedná o prasárnu nejvyššího kalibru Ale mě to stačí, hlavně když to bude fungovat....za předpokladu že je to čistě pro vnitřní účely a nebudu to šířit ven
Chtěl bych se zeptat zasvěcených, jak je to s tím #!/bin/bash ? Znamená to, že se má skript spustit v Bashi, nebo jen konstatování že je to Bashový skript a dělej si s tim co chceš? Upřímně řečeno, psát bash manual.sh proti sh manual.sh je krok zpět, obzvlášť když to u mě funguje stylem sh m[TAB], Efektivita především....ale nechci slyšet že se mám učit Python nebo C, jsem na elektroškole a psaní bashových skriptů mám jen jako takovou berličku (například neskutečně neefektivní skript pro počítání RLC obvodů a generováním grafu přes GNUplot).
Tiskni
Sdílej:
No pokud máš tohle nahoře, tak dej na soubor chmod +x a pak ho spouštěj přímo ./soubor.sh. A on se právě spustí v tom, co je nahoře. Říká se to mu shebang myslim. http://en.wikipedia.org/wiki/Shebang_(Unix)
perl skript.pyuž si ani neškrtnu, jsem si zvyknul...
Mám dojem že je to přesně takhle
Aneb příběh o tom, jak dokáže inovace brzditOmlouvám se, ale nikde jsem tuhle část nenašel. Zápisek je jenom o tom, že máte drobet chaos v termitech. Pokud jsem něco přehlédl, mohl byste tu část zvýraznit?
#!/bin/bash echo "Ahoj"potom priradis spousteci prava:
chmod +x soubor.shnasledne lze skript spustit klasicky takto:
./soubor.shPrvni radek urcuje interpret, ve kterem se skript spusti. Nemusi tam byt jen bash. Pokud spoustis skript timto zpusobem:
sh soubor.sha nefunguje to, tak ti patrne sh (asi symlink) miri na spatny shell - alespon u mne miry /bin/sh na dash (debian testing). Doporucuji tedy spousteni jako
./soubor.shale pokud trvas na
sh soubor.shtak toto by mohlo byt reseni:
rm /bin/sh ln -s bash /bin/shSnad to pomuze.
Děkuju a pro příště se poučim.
Teď koukám, zdá se mi to, nebo funguje alias? alias sh='bash'
Hmm....díky za info, zkusim vymyslet něco lepšího....a možná už mám nápad
curl http://j.mp/spf13-vim3 -o - | sh
. To vše na Ubuntu 11.10. Za to může taky ten slavnej dash?
curl http://j.mp/spf13-vim3 -o - | bash
curl http://j.mp/spf13-vim3; checkbashisms spfl13-vim3
....protože ve škole se učili jen TurboPascal a Javascript
Jo... kdyby obecně v distribucích fungovalo něco rozumného (např.: #!bash, #!python apod), tak by to bylo mnohem lepší.Chystá se něco lepšího
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.