Zpětná kompatibilita BASH skriptů

nm

Zpětná kompatibilita BASH skriptů
« kdy: 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.


y.

Re:Zpětná kompatibilita BASH skriptů
« Odpověď #1 kdy: 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.

TKL

Re:Zpětná kompatibilita BASH skriptů
« Odpověď #2 kdy: 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.

nm

Re:Zpětná kompatibilita BASH skriptů
« Odpověď #3 kdy: 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.

D.A. Tiger

  • ****
  • 463
  • Tygr, který žere tučňáka ;-)
    • Zobrazit profil
    • E-mail
Re:Zpětná kompatibilita BASH skriptů
« Odpověď #4 kdy: 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.


TKL

Re:Zpětná kompatibilita BASH skriptů
« Odpověď #5 kdy: 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

Ravise

  • ***
  • 113
    • Zobrazit profil
    • E-mail
Re:Zpětná kompatibilita BASH skriptů
« Odpověď #6 kdy: 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).

Youda

Re:Zpětná kompatibilita BASH skriptů
« Odpověď #7 kdy: 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.

Jenda

Re:Zpětná kompatibilita BASH skriptů
« Odpověď #8 kdy: 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í.

nm

Re:Zpětná kompatibilita BASH skriptů
« Odpověď #9 kdy: 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.

Re:Zpětná kompatibilita BASH skriptů
« Odpověď #10 kdy: 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

Kit

Re:Zpětná kompatibilita BASH skriptů
« Odpověď #11 kdy: 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.

Kit

Re:Zpětná kompatibilita BASH skriptů
« Odpověď #12 kdy: 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.

gll

  • ****
  • 429
    • Zobrazit profil
    • E-mail
Re:Zpětná kompatibilita BASH skriptů
« Odpověď #13 kdy: 04. 11. 2018, 14:26:26 »
Použij shellcheck. Na nekompatibilní a nebezpečné konstrukce tě upozorní.

gll

  • ****
  • 429
    • Zobrazit profil
    • E-mail
Re:Zpětná kompatibilita BASH skriptů
« Odpověď #14 kdy: 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.