Portál AbcLinuxu, 1. května 2025 22:33

Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Vložit další komentář
27.5.2008 14:01 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
Odpovědět | Sbalit | Link | Blokovat | Admin
function dbg_init () {
    case "$1" in
        '-') exec 4>&1 ;;
        '') exec 4>/dev/null ;;
        *) exec 4>>"$1" ;;
    esac
}

# dbg_init
# dbg_init '-'
# dbg_init "/var/log/${PROGNAME}.log"

function dbg() {
    echo -e "DBG: ${@}" >&4
}

27.5.2008 14:05 pht
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
Odpovědět | Sbalit | Link | Blokovat | Admin
takovych veci, a staci na to jeden radek v perlu. :)
finc avatar 27.5.2008 15:15 finc | skóre: 8 | blog: Finc | Kolín
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
Šum na lince?
Kdo Vam dal pravo ty lidi urazet? A kdo ti dal pravo cumet z okna, ty kr.vo!
Shadow avatar 27.5.2008 15:17 Shadow | skóre: 25 | blog: Brainstorm
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
Tak sem s ním.
If we do not believe in freedom of speech for those we despise we do not believe in it at all.
27.5.2008 15:34 kain
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
ak sa nemylim tak diskutujuci vyssie mal na mysli funkciu DBG ktora sa da riesit v perle prepinacom perl -w. Ale perlom prilis nevladnem a moja domnienka moze byt zla.
27.5.2008 21:07 pht
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
funkce die - existuje primo

humbuk kolem dbg - viz smart comments

load_config - staci si vybrat ... bashoidni konfigy, klasicka inicka, yaml, ... pokazdy mate nacteni pomoci jedne funkce

prasovani command lajny (getopt) kouknete se na getopt::euclid

...
28.5.2008 07:20 Qaxi | skóre: 14 | blog: Qaxi
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
$ ll `which bash` -rwxr-xr-x 1 root root 702160 2008-05-12 20:33 /bin/bash

a to je komplet

$ ll `which perl` -rwxr-xr-x 1 root root 1080468 2007-11-27 12:08 /usr/bin/perl $ du -s /usr/lib/perl/5.8.8/ 11048 /usr/lib/perl/5.8.8/

tj. dohromady 12M ...

700K <> 12000K a tomu odpovídají i možnosti ;-)

Navíc perl opravdu není všude ...
Alík avatar 28.5.2008 13:46 Alík | Iglau
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
Navíc perl opravdu není všude ...
To BASH taky ne ;-)
Kdo se nezfetuje, bude ožrán!
28.5.2008 14:11 Kyosuke | skóre: 28 | blog: nalady_v_modre
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
Ale i do Windows se dá doinstalovat... ;-)
28.5.2008 14:24 Qaxi | skóre: 14 | blog: Qaxi
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
Ale i do Windows se dá doinstalovat... ;-)
To BASH taky ... (já ve Win používám ZSH, ale BASH jsem taky někde viděl) Vždyť Win mají POSIX layer neeeeee ;-)
28.5.2008 14:56 Kyosuke | skóre: 28 | blog: nalady_v_modre
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
Já měl na mysli právě Bash. ;-)
28.5.2008 18:08 pht
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
to ano, proti tomu se nebranim. treba kdyz to udelate v asm, tak pudete na 2kb. ale o to nejde. v bashi delejte utilitky na par radku, slozitejsi veci ve slozitejsim jazyce. reste kde die() pouzit a ne jak ho udelat.
28.5.2008 20:07 Qaxi | skóre: 14 | blog: Qaxi
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
Ale tohle JE na pár řádků ... navíc RW nikoliv RO ;-)

Pro ošetření toho, aby se nějaký program spustil v jednom čase jen jednou nepotřebuji složitější jazyk. Na to stačí BASH viz. tento spot.

V nadpisu spotu je BASH ... pokud Vás to irituje, prosím už ho nečtěte a ani diskuse pod ním.
xkucf03 avatar 27.5.2008 17:16 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
Mně taky nejde moc dohromady BASH a "větší skript", akorát jsem nechtěl zbytečně rýpat. Každý máme nějaký svůj oblíbený jazyk. (ale obecně považuji skriptování spíš za nesystémovou záležitost, kterou se záplatuje chybějící funkcionalita softwaru)
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
27.5.2008 18:18 Kyosuke | skóre: 28 | blog: nalady_v_modre
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
Typický windowsák? ;-) Aneb ukaž mi software, který dělá úplně všechno. Spousta malých nástrojů pohromadě sice taky neudělá úplně všecho, ale myslím, že udělají mnohem víc, než software, jehož tvůrci si bůhvíproč mysleli, že musí umět všechno včetně RFC 2324. :-)
xkucf03 avatar 27.5.2008 19:46 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
software, jehož tvůrci si bůhvíproč mysleli, že musí umět všechno

Spíš než takový monstrózní software považuji za ideální jednotlivé komponenty, které jsou integrované nějakým lepším způsobem, než jsou skripty v BASHi. Mám radši systém tažený událostmi, než takový, který musí být neustále popoháněn pomocí skriptů* aby vůbec fungoval (obvykle periodicky spouštěných cronem).

Ale je fakt, že svět není ideální a bez skriptů se člověk neobejde, alespoň bez těch init.d (pokud nepoužívá nejmenovaný úžasný OS se svcadm).

BTW: to RFC se mi líbí a patička je super :-)

*) které navíc psal admin nikoli programátor a tester kolem nich neprošel ani cestou na oběd :-)

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
27.5.2008 20:33 Kyosuke | skóre: 28 | blog: nalady_v_modre
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
Spíš než takový monstrózní software považuji za ideální jednotlivé komponenty, které jsou integrované nějakým lepším způsobem, než jsou skripty v BASHi. Mám radši systém tažený událostmi, než takový, který musí být neustále popoháněn pomocí skriptů* aby vůbec fungoval (obvykle periodicky spouštěných cronem).
Teď mluvíš o Emacsu... ;-) (Aneb událostmi řízený systém s mnoha jednotlivými komponentami, integrovanými v jednoduchém, ale mocném dynamickém jazyku.)
xkucf03 avatar 27.5.2008 21:02 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
Spíš o SOA. Ale s tím je problém, že polovina lidí ho odmítne, protože je příliš drahé a druhá polovina proto, že je to buzzword. A jen málokdo chápe, že to jsou v první řadě obecné principy a ne nějaký (ku*evsky drahý) software, a tak se denně na milionech počítačích stále pouštějí periodicky nějaké dávkové skripty a přelívají se terabajty dat.
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
Fluttershy, yay! avatar 27.5.2008 19:47 Fluttershy, yay! | skóre: 93 | blog:
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
Aneb ukaž mi software, který dělá úplně všechno.

Bez váhání dávám Emacs. ^_^

🇵🇸Touch grass🇺🇦 ✊ ani boha, ani pána
27.5.2008 20:36 Kyosuke | skóre: 28 | blog: nalady_v_modre
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
Říkám to nerad, ale Emacs RFC 2324 skutečně podporuje, takže i to kafe uvaří. :-D Ale ten hardware si pro to budu muset asi udělat sám... :-(
28.5.2008 08:30 Qaxi | skóre: 14 | blog: Qaxi
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
Jo Jo

Větší script je tak na čtyři terminály, pak už je to na něco kompilovaného ...

Třeba na javu ;-) ;-) ;-) ;-) ;-) ;-)
27.5.2008 16:07 Tomáš | skóre: 31 | blog: Tomik
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
Odpovědět | Sbalit | Link | Blokovat | Admin
Ještě mi tam chybí nějaké parsování parametrů. Kdysi jsem něco našel. Je to taky jenom kostra, chce to dopsat, co to vlastně má dělat.

#!/bin/sh
help(){
echo Usage: $0 
}

if [ $# -lt 1 ]
then
  help
else
  echo OK
fi

while getopts h opt
do
  case $opt in
    h) help;;
    \?) help;;
  esac
done
shift $(($OPTIND - 1))

echo Running
27.5.2008 18:23 Chocolate Bear | blog: Chocolate Bear
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
Odpovědět | Sbalit | Link | Blokovat | Admin
Jak jako kostra? Tohle by přece po úpravě menší než drobné by mohlo jít nainkůdovat tečkou, no ni?
THIS IS SPARTA!
28.5.2008 07:27 Qaxi | skóre: 14 | blog: Qaxi
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
No jasně ...

Kostra je to proto, abyses mohl rozhodnout jestli to budeš psát přímo nebo to natečkuješ.

U nekompilovaných věci se spíš kloním k nesdílení "knihoven", je tam riziko, že uděláš v knihovně změnu a "kompilátor bash" tě neupozorní na chybku ... ;-) Prostě mi skripty přijdou příliš křehký ...
Marián Kyral avatar 27.5.2008 20:07 Marián Kyral | skóre: 29 | blog: Sem_Tam | Frýdek-Místek
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
Odpovědět | Sbalit | Link | Blokovat | Admin
[ "s${DBG}" = "sy" ] && echo -e "DBG: ${@}" 1>&2
Jaký je rozdíl oproti [ "${DBG}" = "y" ] && echo -e "DBG: ${@}" 1>&2 ?
David Watzke avatar 27.5.2008 20:26 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
Lepší je nastavit DBG na true/false, pak lze rovnou
$DBG && echo -e "DBG: $@" >&2
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
28.5.2008 08:27 Qaxi | skóre: 14 | blog: Qaxi
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
souhlas

Nedělám to ze dvou důvodů:

1) musíte DBG mít definovanou a nesmíte tam mít nic jiného než "true" nebo "false", jinak je výsledek těžko předvídatelný a nebo dokonce řachne script ...
$ DBG=true
$ $DBG && echo "OK"
OK
$ 
$ DBG=false
$ $DBG && echo "OK"
$ 
$ DBG=jabaduba
$ $DBG && echo "OK"
bash: jabaduba: command not found     
# šlo by ošetřit pomocí set -e - bash by po takovéto chybě nepokračovat 
$ 
$ unset DBG
$ $DBG && echo "OK"
OK
# je to opravdu chování které autor chtěl?
$ 
2) na shellech kde "true", "false" a "test" jsou uvnitř shellu je téměř jedno který z nich voláte a s "test" máte jistotu CO to udělá.
27.5.2008 21:04 pht
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
rozdil je ze kdyz nemate DBG definovane vubec tak by "" = "y" udelalo b0rk...
27.5.2008 21:05 Chocolate Bear | blog: Chocolate Bear
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
Minimálně v BASHi teda určitě ne.
THIS IS SPARTA!
Marián Kyral avatar 27.5.2008 21:11 Marián Kyral | skóre: 29 | blog: Sem_Tam | Frýdek-Místek
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
Fakt? Já myslel, že se porovná prázdný řetězec s řetězcem "y". A to normálně funguje:
# set |grep DBG
# [ "${DBG}" = "y" ] && echo Yes || echo No
No
# DBG=y
# [ "${DBG}" = "y" ] && echo Yes || echo No
Yes
#
GandY avatar 28.5.2008 09:31 GandY | skóre: 3 | blog: Zo života | Bratislava
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
to sa dá vyriešiť aj substitúciou:
# [ "${DBG:-n}" = "y" ] && echo Yes || echo No
ak premenná DBG nie je nastavená, tak sa použije hodnota 'n'.
28.5.2008 15:07 Qaxi | skóre: 14 | blog: Qaxi
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
Jasně, ale pak je to totální BASHismus a na jiném shellu to nemá ani šanci chodit ...

Ten původní kód by s maličkýma úpravama mohl chodit skoro kdekoliv ...
GandY avatar 28.5.2008 16:59 GandY | skóre: 3 | blog: Zo života | Bratislava
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
no mne to funguje aj v korn shell a to aj pod AIX a HP-UX
28.5.2008 17:14 Kyosuke | skóre: 28 | blog: nalady_v_modre
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
WTF? RTFM! :-)
28.5.2008 19:35 Qaxi | skóre: 14 | blog: Qaxi
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
Fakt ... koukam jako trubka. :-< Děkuj za doplnění vzdělání.

Já to bral jako BASHismus a ono je to POSIXové.

Nejstarší normu na POSIX jsme našel IEEE Std 1003.1,2001 Edition a tam to je taky.

A všechny (/usr)/bin/sh co mám dostupné tak to nahradí správně
$ echo "${QQQ:-www}"
www
$
Nedostanete se někdo ke starším verzím? Jak je to tam?
28.5.2008 19:59 Kyosuke | skóre: 28 | blog: nalady_v_modre
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
Fakt ... koukam jako trubka. :->
Zlomená? ;-) Pajpa přeci kouká takhle: :| :-D
28.5.2008 20:30 Qaxi | skóre: 14 | blog: Qaxi
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
Opravuji

... koukám jako zlomená trubka. :->
28.5.2008 07:58 Qaxi | skóre: 14 | blog: Qaxi
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
žádný

Když tak o tom přemýšlím tak je to trik který jsem se naučil na nějakém opravdu starém U*xu. Mám pocit, že to souviselo se shellem v POSIX režimu, ale už opravdu nevím.

Vidíte jak se člověka drží staré a leckdy už dávno nepotřebné konstrukce.
$ DBG="y"
$ 
$ [ "s${DBG}" = "sy" ] && echo OK
OK
$ 
$ [ "${DBG}" = "y" ] && echo OK
OK
$ 
$ [ ${DBG} = "y" ] && echo OK
OK
$ 
$ [ $DBG = "y" ] && echo OK
OK
$ 
$
$
$ DBG="n"
$ 
$ [ "s${DBG}" = "sy" ] && echo OK
$ 
$ [ "${DBG}" = "y" ] && echo OK
$ 
$ [ ${DBG} = "y" ] && echo OK
$ 
$ [ $DBG = "y" ] && echo OK
$
$
$
$ 
$ unset DBG
$ 
$ [ "s${DBG}" = "sy" ] && echo OK
$ 
$ [ "${DBG}" = "y" ] && echo OK
$ 
$ [ ${DBG} = "y" ] && echo OK
bash: [: =: unary operator expected
$ 
$ [ $DBG = "y" ] && echo OK
bash: [: =: unary operator expected
$ 
28.5.2008 09:08 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
žádný

Když tak o tom přemýšlím tak je to trik který jsem se naučil na nějakém opravdu starém U*xu. Mám pocit, že to souviselo se shellem v POSIX režimu, ale už opravdu nevím.
ten "trik" je o imho viac o používaní uvodzoviek ako o starom U*x-e :-)
28.5.2008 11:32 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
V bashi tam rozdíl není, ale na některých systémech existují verze příkazu test, které si neporadí s [ "$x" = "y" ], není-li proměnná x nastavena. Pokud je ale na začátku skriptu '#!/bin/bash', je zbytečné toto zaříkávání provádět.
28.5.2008 15:11 Qaxi | skóre: 14 | blog: Qaxi
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
Aha, odsud vítr fouká ... Díky za připomenutí.
Pokud je ale na začátku skriptu '#!/bin/bash', je zbytečné toto zaříkávání provádět.
Jasně, prostě se člověk snaží psát přenositelně, i když má rád BASH. Schválně to otestuji v POSIX režimu a potom na
/bin/sh
na HP/UX a solarisu ... dám vědět.
Marián Kyral avatar 28.5.2008 16:03 Marián Kyral | skóre: 29 | blog: Sem_Tam | Frýdek-Místek
Rozbalit Rozbalit vše Re: BASH - kostra většího skriptu
Testoval jsem to v práci na nějakém AIXu, /bin/ksh a /bin/sh - funguje bez problémů.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.