Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: nm 03. 11. 2018, 11:34:28
-
Zdravím.
Učím se trochu programovat v BASH a narazil jsem na otázku, zda dodržovat při programování zpětnou kompatibilitu s dřívějšími verzemi BASH. Ptám se tedy, v jakých případech by se měla zpětná kompatibilita dodržovat a v případě, že jo, tak jak hluboko do historie verzí BASH.
-
To je zcela na vas. V C taky lide (vetsinou) neprogramuji v K&R standardu, aby byli "absolutne" kompatibilni -- stejne by nebyli.
Jen se smirte s tim, ze ackoliv se budete snazit drzet kompatibilitu hluboko do historie, vzdycky se najde nekdo, kdo si bude stezovat, ze pro jeho platformu to nebezi.
-
Zdravím.
Učím se trochu programovat v BASH a narazil jsem na otázku, zda dodržovat při programování zpětnou kompatibilitu s dřívějšími verzemi BASH. Ptám se tedy, v jakých případech by se měla zpětná kompatibilita dodržovat a v případě, že jo, tak jak hluboko do historie verzí BASH.
Pokud úplně začínáte, doporučuji rovnou začít s čistým shellovým skriptováním, tzn. #!/bin/sh
O nic zásadního nepřijdete a kompatibilita bude mnohem lepší. Bash použijte jen v případech, kdy to jinak nepůjde.
-
Zdravím.
Učím se trochu programovat v BASH a narazil jsem na otázku, zda dodržovat při programování zpětnou kompatibilitu s dřívějšími verzemi BASH. Ptám se tedy, v jakých případech by se měla zpětná kompatibilita dodržovat a v případě, že jo, tak jak hluboko do historie verzí BASH.
Pokud úplně začínáte, doporučuji rovnou začít s čistým shellovým skriptováním, tzn. #!/bin/sh
O nic zásadního nepřijdete a kompatibilita bude mnohem lepší. Bash použijte jen v případech, kdy to jinak nepůjde.
Tomu uplne nerozumim. Ale v knizce o programovani v Linuxu (a o ten mi jde predevsim) jsem cetl, ze /bin/sh je, v mnoha pripadech Linuxovych distribuci, odkaz na bash.
-
Zdravím.
Učím se trochu programovat v BASH a narazil jsem na otázku, zda dodržovat při programování zpětnou kompatibilitu s dřívějšími verzemi BASH. Ptám se tedy, v jakých případech by se měla zpětná kompatibilita dodržovat a v případě, že jo, tak jak hluboko do historie verzí BASH.
Pokud úplně začínáte, doporučuji rovnou začít s čistým shellovým skriptováním, tzn. #!/bin/sh
O nic zásadního nepřijdete a kompatibilita bude mnohem lepší. Bash použijte jen v případech, kdy to jinak nepůjde.
Tomu uplne nerozumim. Ale v knizce o programovani v Linuxu (a o ten mi jde predevsim) jsem cetl, ze /bin/sh je, v mnoha pripadech Linuxovych distribuci, odkaz na bash.
To je do jiste miry pravda. Ale napriklad v Debianu je to odkaz na /bin/dash, ktery je mensi, rychlejsi avsak neobsahuje BASHismy - viz napr. http://www.abclinuxu.cz/clanky/odstranujeme-bashismy. Diky temto vecem by pak Vas skript byl kompatibilni tak maximalne s Bashem.
Jinak co se tyce zpetne kompatibility, myslim, ze to zas az tak moc hrotit nemusite. Samotne interpretery shellu se obecne meni jen malo, takze nenarazite moc na veci, ktere v pristich verzich nebudou fungovat, ci budou moc odlisne. Me se to jeste nestalo, alespon co se tyce interpreteru.
Neco jineho jsou vnejsi prikazy, cesty, atpd... A to by jste se podle meho z toho pak asi zblaznil. Takze podle me je jednodusi se snazit o
kompatibilitu max. na urovni aktualnich dister.
-
Zdravím.
Učím se trochu programovat v BASH a narazil jsem na otázku, zda dodržovat při programování zpětnou kompatibilitu s dřívějšími verzemi BASH. Ptám se tedy, v jakých případech by se měla zpětná kompatibilita dodržovat a v případě, že jo, tak jak hluboko do historie verzí BASH.
Pokud úplně začínáte, doporučuji rovnou začít s čistým shellovým skriptováním, tzn. #!/bin/sh
O nic zásadního nepřijdete a kompatibilita bude mnohem lepší. Bash použijte jen v případech, kdy to jinak nepůjde.
Tomu uplne nerozumim. Ale v knizce o programovani v Linuxu (a o ten mi jde predevsim) jsem cetl, ze /bin/sh je, v mnoha pripadech Linuxovych distribuci, odkaz na bash.
V mnoha případech, ale ne vždy. Třeba v Ubuntu je to dash. Na ne-linuxových OS (BSD) nebývá Bash ani nainstalován. Ano, dá se samozřejmě doinstalovat, ale už je to zbytečná komplikace navíc.
Rozdíly mezi skriptováním pro Bash a sh nejsou zase tak velké, některé konstrukce jsou trošku jiné (např. Bash používá ==, sh jen =). Jsou situace, kdy se některé věci dají udělat jen v Bashi, ale těch je opravdu minimum.
Zkrátka, lepší je umět klasické POSIX shell skripty, které budou fungovat všude, a pak se doučit jen rozdíly, které Bash nabízí a ty pak využit ve speciálních případech.
Skript, napsaný pro POSIX shell bude fungovat i v Bashi, ale skript s čistě bashovými příkazy a syntaxí v jiném shellu než bash fungovat nebude.
Vyberte si sám, která z těch dvou možností je ta lepší.
Nějaké informace:
https://stackoverflow.com/questions/5725296/difference-between-sh-and-bash#5725402
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html
http://mywiki.wooledge.org/Bashism
-
Tomu uplne nerozumim. Ale v knizce o programovani v Linuxu (a o ten mi jde predevsim) jsem cetl, ze /bin/sh je, v mnoha pripadech Linuxovych distribuci, odkaz na bash.
Bash chová POSIXově, když je spuštěný z /bin/sh (viz třeba https://man.cx/bash#heading7 (https://man.cx/bash#heading7)).
-
Bash je na jednoucelove udelatka.
Pokud mas ambici, aby tvuj vvytvor prezil par releasu dister, pis v necem vhodnejsim.
Python a perl je pribaleny vsade.
-
Bash je na jednoucelove udelatka.
Pokud mas ambici, aby tvuj vvytvor prezil par releasu dister, pis v necem vhodnejsim.
Python a perl je pribaleny vsade.
lol, zrovna teď řeším, že mi věci nepodporují Python 3. A Perl neznám, ale verze 6 je prý také nekompatibilní.
-
Zdravím.
Učím se trochu programovat v BASH a narazil jsem na otázku, zda dodržovat při programování zpětnou kompatibilitu s dřívějšími verzemi BASH. Ptám se tedy, v jakých případech by se měla zpětná kompatibilita dodržovat a v případě, že jo, tak jak hluboko do historie verzí BASH.
Pokud úplně začínáte, doporučuji rovnou začít s čistým shellovým skriptováním, tzn. #!/bin/sh
O nic zásadního nepřijdete a kompatibilita bude mnohem lepší. Bash použijte jen v případech, kdy to jinak nepůjde.
Tomu uplne nerozumim. Ale v knizce o programovani v Linuxu (a o ten mi jde predevsim) jsem cetl, ze /bin/sh je, v mnoha pripadech Linuxovych distribuci, odkaz na bash.
To je do jiste miry pravda. Ale napriklad v Debianu je to odkaz na /bin/dash, ktery je mensi, rychlejsi avsak neobsahuje BASHismy - viz napr. http://www.abclinuxu.cz/clanky/odstranujeme-bashismy. Diky temto vecem by pak Vas skript byl kompatibilni tak maximalne s Bashem.
Jinak co se tyce zpetne kompatibility, myslim, ze to zas az tak moc hrotit nemusite. Samotne interpretery shellu se obecne meni jen malo, takze nenarazite moc na veci, ktere v pristich verzich nebudou fungovat, ci budou moc odlisne. Me se to jeste nestalo, alespon co se tyce interpreteru.
Neco jineho jsou vnejsi prikazy, cesty, atpd... A to by jste se podle meho z toho pak asi zblaznil. Takze podle me je jednodusi se snazit o
kompatibilitu max. na urovni aktualnich dister.
Tak v ty knizce, co se z ni ucim, je zpetna kompatibilita uz zahrnuta, protoze vsechny ukazkove skripty zacinaji #!/bin/sh
Jinak jsem si precetl odkaz na clanek na abclinuxu a musim rict, ze kniha spise popisuje zpetne kompatibilni veci a na bashismy obcas upozornuje. Kniha je z z roku 2008.
-
Za me rozhodne nedodrzovat. BASH 4 prinesl spoustu uzitecnych novinek a uz nekolik let je vsech hlavnich distribucich. Sezente si nejakou aktualni knihu nebo nejaky novejsi web tutorial a zacnete programovat, na nejakou zpetnou kompatibilitu se muzete vyprdnout. Pochybuji, ze jeste nejaka linuxova distribuce, ktera ma support (aktualizace), pouziva BASH v3. Napisu par skriptu prakticky kazdy tyden a bez [[ =~ ]], variable expansions a associativniho pole bych to uz delat nechtel.
Michal
-
Bash je na jednoucelove udelatka.
Pokud mas ambici, aby tvuj vvytvor prezil par releasu dister, pis v necem vhodnejsim.
Python a perl je pribaleny vsade.
lol, zrovna teď řeším, že mi věci nepodporují Python 3. A Perl neznám, ale verze 6 je prý také nekompatibilní.
Python3 je přece jen trochu jiný jazyk. Součástí OS bývá Python2 a Perl5.
-
... Napisu par skriptu prakticky kazdy tyden a bez [[ =~ ]], variable expansions a associativniho pole bych to uz delat nechtel.
Michal
Když jsem tuhle předělával něčí skripty, které tyto blbinky obsahovaly, tak byl výsledek kratší a elegantnější. Bash používám, ale nemusím použít všechny vymoženosti jen k tomu, aby tam byly.
-
Použij shellcheck. Na nekompatibilní a nebezpečné konstrukce tě upozorní.
-
Python3 je přece jen trochu jiný jazyk.
s takovým přístupem větší projekt nezmigruješ. Musí přechodně fungovat jak v Pythonu 2, tak v Pythonu 3.
-
Python3 je přece jen trochu jiný jazyk.
s takovým přístupem větší projekt nezmigruješ. Musí přechodně fungovat jak v Pythonu 2, tak v Pythonu 3.
Je spousta aplikací napsaných v Pythonu2, které nikdo migrovat nebude.
Bavíme se o shellových skriptech, u kterých se Python použije jen jako jeho rozšíření. O větších projektech nebyla řeč.
-
Za me rozhodne nedodrzovat. BASH 4 prinesl spoustu uzitecnych novinek a uz nekolik let je vsech hlavnich distribucich. Sezente si nejakou aktualni knihu nebo nejaky novejsi web tutorial a zacnete programovat, na nejakou zpetnou kompatibilitu se muzete vyprdnout. Pochybuji, ze jeste nejaka linuxova distribuce, ktera ma support (aktualizace), pouziva BASH v3. Napisu par skriptu prakticky kazdy tyden a bez [[ =~ ]], variable expansions a associativniho pole bych to uz delat nechtel.
No, asi tak nějak... Pamatuji před cca 10+ (?) lety hromadnou onanii, jak předěláme všechno, co závisí na BASHi, do POSIX-kompatidebilního shellu (v Debianu hrůza jménem dash). Těch tisíců promrhaných hodin totálním nesmyslem. ::)
-
Zdravím.
Učím se trochu programovat v BASH a narazil jsem na otázku, zda dodržovat při programování zpětnou kompatibilitu s dřívějšími verzemi BASH. Ptám se tedy, v jakých případech by se měla zpětná kompatibilita dodržovat a v případě, že jo, tak jak hluboko do historie verzí BASH.
v klidu ignoruj at pouzijes neco jineho abys mel mene problemu (napr. python kterej jak uz bylo receno s prechodem z python2 na python3 je problem)...
pokud planujes pouzivat scripty i jinde nez na GNU/Linuxu ma vyznam se snazit vyhnout tomu co BASH nabizi, tedy psat jen pro #!/bin/sh to ze to ve vysledku vola bash nebo dash je irelevantni, protoze pokud je to volane pres link sh, tak se pouzivaji jen ciste sh moznososti...
na druhou stranu, pokud pocitas s pouzitim vyhradne na GNU/Linuxu vubec bych se nebal pouzivat BASH pokud se to bude hodit, nebo klidne vzdy pokud nebudes delat zpracovani hromady dat kde sh muze byt rychlejsi... v malem meritku to nepoznas...
za me treba z BASH vyuzivam nahrady znaku v promenych, napr:
neco="aaa bbb 111"
echo ${neco/bbb}
aaa 111
v sh by se muselo resit napr pres sed
neco="aaa bbb 111"
echo ${neco} | sed 's/bbb //'
aaa 111
vice o vsech dalsich moznostech nahrady v promene: https://www.tldp.org/LDP/abs/html/parameter-substitution.html
z "Advanced Bash-Scripting Guide": http://www.tldp.org/LDP/abs/html/index.html
coz je soucast vyborneho "The Linux Documentation Project": http://www.tldp.org/index.html
-
za me treba z BASH vyuzivam nahrady znaku v promenych, napr:
neco="aaa bbb 111"
echo ${neco/bbb}
aaa 111
Tohle je zrovna dobrá ukázka použití Bashe. Bohužel se však stále setkávám s používáním polí, které dokáží skript pěkně zašmodrchat. Přitom Bash nabízí mnohem lepší možnosti.
-
Python3 je přece jen trochu jiný jazyk.
Tak na to se dá logicky odpovědět, že Bash 4 je také jen trochu jiný jazyk.
Součástí OS bývá Python2 a Perl5.
Ano, a jak dlouho?
-
Python3 je přece jen trochu jiný jazyk.
Tak na to se dá logicky odpovědět, že Bash 4 je také jen trochu jiný jazyk.
Pokud vím, tak je Bash4 zpětně kompatibilní, což se o Pythonu3 tvrdit nedá.
Proti Bash4 nic nemám, vadí mi jen zneužívání polí.
-
Za me rozhodne nedodrzovat. BASH 4 prinesl spoustu uzitecnych novinek a uz nekolik let je vsech hlavnich distribucich. Sezente si nejakou aktualni knihu nebo nejaky novejsi web tutorial a zacnete programovat, na nejakou zpetnou kompatibilitu se muzete vyprdnout. Pochybuji, ze jeste nejaka linuxova distribuce, ktera ma support (aktualizace), pouziva BASH v3. Napisu par skriptu prakticky kazdy tyden a bez [[ =~ ]], variable expansions a associativniho pole bych to uz delat nechtel.
Michal
BASH v3 používá:
1) SLES 11 -> EOL duben 2022
2) macOS -> z důvodu licence tam asi buden navždy, nebo bude muset Apple migrovat na nějaký jiný BASH compatible shell
Ale jinak s vámi souhlasím, BASH v3 je minimum, v práci si bohužel nemohu dovolit využívat novinky z BASH v4, právě z důvodů podpory výše uvedených OS.
-
na zacatku skriptu urci interpret a dal se na to vyser
-
[k3dAR]
Diky moc :)
-
Ahoj,
rád bych doplnil odpovědi o něco, co tu chybí.
#!/bin/sh
je super pokud chceš být kompatiblni se všemi možnými shelly (a v takovém případě se chceš vyhnout bashi a píšeš posix script, jak již bylo zmíněno) ale původní otázka se týka kompatibility BASHů.
Proto bych doporučil použít #!/usr/bin/env bash
I proto když se třeba záměrně nechceš okrást o BASH funkcionalitu. Plus je to dnes jakýsi standard ale to je moje doměnka vycházející ze zkušenosti :)
Výše zmýněná konstrukce zajistí spuštění bashe, který je právě na sysytému nainstalován (resp. první bash v cestě $PATH).
-
Plus je to dnes jakýsi standard ale to je moje doměnka vycházející ze zkušenosti :)
Tohle jsem videl prakticky vyhradne jen u Pythonich scriptu (kde bych tu snahu ten pythoni bordel aspon trochu ukocirovat chapal), u shell scriptu se spis sazi na kompatibilni zapis (a pouziti #!/bin/sh) pokud jde o snahu zachovat funkcnost vsude mozne.
-
Zdravím.
Učím se trochu programovat v BASH a narazil jsem na otázku, zda dodržovat při programování zpětnou kompatibilitu s dřívějšími verzemi BASH. Ptám se tedy, v jakých případech by se měla zpětná kompatibilita dodržovat a v případě, že jo, tak jak hluboko do historie verzí BASH.
Pokud ti jde v prvé řadě o přenositelnost, pak doporučuji POSIX shell. Např. na MacOSX je bash 3.x, na Linuxu všude většinou 4.x. Např. asocitativní pole jsou podporovány až od 4.x. Další problém může být GNU, BSD nebo komerční svět. Takže GNU obecně podporuje nejvíc nekompatibilních fýčuránek. Takže např napsat sed skript přenositelný mezi Linuxem a MacOSX je oser.
Spousta portabilních scriptů začíná nějakých 100 řádkovým case-esac blokem: http://standalone.contextgarden.net/setup/first-setup.sh
Tady hlavně kvůli instalaci binárek, ale občas tam jsou i různý nekompatibility na úrovni systémových/POSIX utilitek. Kdysi mě třeba zaskočilo, že Slackware nemá dlouhé přepínače na CLI, napsal jsem pro zákazníka skript, kde jsem použil pro lepší čitelnost dlouhé přepínače z RedHatu a musel jsem to předělávat...
Např. chování a přepínače něčeho tak zásadního jako je echo jsou dost nepřehledné, takže použij spíš printf. Pokud píšeš skripty pro sebe, tak si ušetři práci a na kompatibilitu se vyprdni, pokud je to jen pro Linux a pro tebe.
Spíš se zaměř na čitelnost, nějaké strukturování (functions) a kontrolu návratových kódů a přepínačů a občas si to nech zkritizovat shellcheckem.
-
...Pokud píšeš skripty pro sebe, tak si ušetři práci a na kompatibilitu se vyprdni, pokud je to jen pro Linux a pro tebe.
Spíš se zaměř na čitelnost, nějaké strukturování (functions) a kontrolu návratových kódů a přepínačů a občas si to nech zkritizovat shellcheckem.
Myslim, ze budu spise psat skripty v Linuxu a pro sebe. Co mi v takovem pripade doporucujete? Naucit se psat skripty POSIXove (nektere linuxove distribuce jsou lepsi ve starych verzich), nebo se naucit ficury z BASHe (pro novejsi systemy)? To bych ale pak musel umet rozlisit vsechny Bashismy - tedy znat rozdily BASH vs POSIX sh (a pripadne i dash).
-
Jak uz jsem tady psal nekde na zacatku diskuze, pokud to nepotrebujes, je zbytecne nejakou zpetnou kampatibilitu resit. Kdyz budes dobre znat BAash, zvladnes, bez problemu napsat i POSIX kompatibilni skript. Pokud umis alespon trochu programovat doporucuji knizku "Bash Notes For Professionals". Bash neni nijak slozity takze neni treba ztracet cas nejakou teorii.
-
Plus je to dnes jakýsi standard ale to je moje doměnka vycházející ze zkušenosti :)
Tohle jsem videl prakticky vyhradne jen u Pythonich scriptu (kde bych tu snahu ten pythoni bordel aspon trochu ukocirovat chapal), u shell scriptu se spis sazi na kompatibilni zapis (a pouziti #!/bin/sh) pokud jde o snahu zachovat funkcnost vsude mozne.
Argument vůči informaci vytržené z kontextu. Proto jsem to také vztahoval k BASHi.