Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: nm 03. 11. 2018, 11:34:28

Název: Zpětná kompatibilita BASH skriptů
Přispěvatel: 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.
Název: Re:Zpětná kompatibilita BASH skriptů
Přispěvatel: y. 03. 11. 2018, 12:14:39
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.
Název: Re:Zpětná kompatibilita BASH skriptů
Přispěvatel: TKL 03. 11. 2018, 13:16:26
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.
Název: Re:Zpětná kompatibilita BASH skriptů
Přispěvatel: nm 03. 11. 2018, 13:27:36
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.
Název: Re:Zpětná kompatibilita BASH skriptů
Přispěvatel: D.A. Tiger 03. 11. 2018, 13:51:01
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.
Název: Re:Zpětná kompatibilita BASH skriptů
Přispěvatel: TKL 03. 11. 2018, 13:52:27
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
Název: Re:Zpětná kompatibilita BASH skriptů
Přispěvatel: Ravise 03. 11. 2018, 14:12:40
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)).
Název: Re:Zpětná kompatibilita BASH skriptů
Přispěvatel: Youda 03. 11. 2018, 15:41:11
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.
Název: Re:Zpětná kompatibilita BASH skriptů
Přispěvatel: Jenda 03. 11. 2018, 17:39:38
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í.
Název: Re:Zpětná kompatibilita BASH skriptů
Přispěvatel: nm 04. 11. 2018, 08:06:41
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.
Název: Re:Zpětná kompatibilita BASH skriptů
Přispěvatel: Michal Zacek 04. 11. 2018, 12:44:29
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
Název: Re:Zpětná kompatibilita BASH skriptů
Přispěvatel: Kit 04. 11. 2018, 12:48:25
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.
Název: Re:Zpětná kompatibilita BASH skriptů
Přispěvatel: Kit 04. 11. 2018, 12:57:47
... 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.
Název: Re:Zpětná kompatibilita BASH skriptů
Přispěvatel: gll 04. 11. 2018, 14:26:26
Použij shellcheck. Na nekompatibilní a nebezpečné konstrukce tě upozorní.
Název: Re:Zpětná kompatibilita BASH skriptů
Přispěvatel: gll 04. 11. 2018, 14:34:51
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.
Název: Re:Zpětná kompatibilita BASH skriptů
Přispěvatel: Kit 04. 11. 2018, 15:22:19
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č.
Název: Re:Zpětná kompatibilita BASH skriptů
Přispěvatel: Lol Phirae 04. 11. 2018, 15:31:23
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.  ::)
Název: Re:Zpětná kompatibilita BASH skriptů
Přispěvatel: k3dAR 04. 11. 2018, 15:58:00
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:
Kód: [Vybrat]
neco="aaa bbb 111"
echo ${neco/bbb}
aaa 111
v sh by se muselo resit napr pres sed
Kód: [Vybrat]
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
Název: Re:Zpětná kompatibilita BASH skriptů
Přispěvatel: Kit 04. 11. 2018, 16:23:18
za me treba z BASH vyuzivam nahrady znaku v promenych, napr:
Kód: [Vybrat]
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.
Název: Re:Zpětná kompatibilita BASH skriptů
Přispěvatel: Jenda 04. 11. 2018, 16:30:15
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?
Název: Re:Zpětná kompatibilita BASH skriptů
Přispěvatel: Kit 04. 11. 2018, 17:34:46
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í.
Název: Re:Zpětná kompatibilita BASH skriptů
Přispěvatel: fe 05. 11. 2018, 08:52:03
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.
Název: Re:Zpětná kompatibilita BASH skriptů
Přispěvatel: pedro 05. 11. 2018, 12:14:22
na zacatku skriptu urci interpret a dal se na to vyser
Název: Re:Zpětná kompatibilita BASH skriptů
Přispěvatel: D.A. Tiger 05. 11. 2018, 13:35:32
[k3dAR]
Diky moc :)
Název: Re:Zpětná kompatibilita BASH skriptů
Přispěvatel: Marek 06. 11. 2018, 09:04:35
Ahoj,

rád bych doplnil odpovědi o něco, co tu chybí.

Kód: [Vybrat]
#!/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
Kód: [Vybrat]
#!/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).
Název: Re:Zpětná kompatibilita BASH skriptů
Přispěvatel: kmarty 06. 11. 2018, 10:17:15
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.
Název: Re:Zpětná kompatibilita BASH skriptů
Přispěvatel: JardaH 06. 11. 2018, 14:31:11
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.

Název: Re:Zpětná kompatibilita BASH skriptů
Přispěvatel: nm 09. 11. 2018, 11:36:20
...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).
Název: Re:Zpětná kompatibilita BASH skriptů
Přispěvatel: Michal Zacek 09. 11. 2018, 15:11:34
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.
Název: Re:Zpětná kompatibilita BASH skriptů
Přispěvatel: Marek 09. 11. 2018, 15:27:38
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.