Portál AbcLinuxu, 13. července 2025 04:50


Dotaz: BASH. Co je spatne na teto podmince.

21.8.2007 14:21 OgeeN
BASH. Co je spatne na teto podmince.
Přečteno: 555×
Odpovědět | Admin
Ahoj,

mam ve svem skriptu tuto podminku:

if [ -a /etc/*-release ];then
	printf "OS:\n\t`cat /etc/*-release`\n"
fi
Na vetsine serveru mi to funguje bez problemu, ale kdyz skusim skript spustit na stroji s fedorou narazim na problem:
ls /etc/*-release
/etc/fedora-release  /etc/redhat-release
Soubory ktere konci na -release jsou dva a bash vyhodi chybu: /usr/local/bin/hwi.sh: line 20: [: /etc/fedora-release: binary operator expected

Jak bych mel podminku upravit, aby skript fungoval?

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

Odpovědi

zoul avatar 21.8.2007 14:46 zoul | skóre: 43 | blog: | Boskovice
Rozbalit Rozbalit vše Re: BASH. Co je spatne na teto podmince.
Odpovědět | | Sbalit | Link | Blokovat | Admin
hwi.sh znamená „hardware info“? Nestačilo by místo parsování souborů v /etc něco z uname?
zoul@naima:~$ for sw in m n p s r; do echo "-$sw `uname -$sw`"; done
-m Power Macintosh
-n naima
-p powerpc
-s Darwin
-r 8.10.0
zoul@naima:~$ 
…čili třeba to uname -r?
21.8.2007 14:49 OgeeN
Rozbalit Rozbalit vše Re: BASH. Co je spatne na teto podmince.
Nestacilo.

V souboru *-release presna verze os:
server var # cat /etc/gentoo-release
Gentoo Base System version 1.12.7
server var #
Uname pouzivam taky.
zoul avatar 21.8.2007 14:59 zoul | skóre: 43 | blog: | Boskovice
Rozbalit Rozbalit vše Re: BASH. Co je spatne na teto podmince.
V tom případě třeba ls /etc/*-release &> /dev/null && cokoliv. Není to vrchol elegance, ale funguje to :)
David Watzke avatar 21.8.2007 19:56 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: BASH. Co je spatne na teto podmince.
Minimálně u Gentoo to není zrovna verze OS, ale prosím...
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
22.8.2007 10:39 Jiří J. | skóre: 34 | blog: Poutník | Brno
Rozbalit Rozbalit vše Re: BASH. Co je spatne na teto podmince.
A u Slackware je tuším /etc/Slackware-version :-)
21.8.2007 15:11 bitguard
Rozbalit Rozbalit vše Re: BASH. Co je spatne na teto podmince.
Odpovědět | | Sbalit | Link | Blokovat | Admin
pouzi nieco ako:

ls /etc/|grep release if [ $? -eq 0 ]; then ... fi
21.8.2007 15:13 bitguard
Rozbalit Rozbalit vše Re: BASH. Co je spatne na teto podmince.
kua, este raz:

ls /etc/|grep release
if [ $? -eq 0 ]; then
...
fi
21.8.2007 16:05 blondak | skóre: 36 | blog: Blondak | Čáslav
Rozbalit Rozbalit vše Re: BASH. Co je spatne na teto podmince.
a nebo
ls /etc/*-release >/dev/null 2>/dev/null
if [ $? -eq 0 ]; then
...
fi
Každý problém ma své logické, snadno pochopitelné nesprávné řešení.
21.8.2007 16:09 OgeeN
Rozbalit Rozbalit vše Re: BASH. Co je spatne na teto podmince.
Diky moc za tipy.

Vecer to vyzkousim a dam vedet.

Diky.
zoul avatar 21.8.2007 16:13 zoul | skóre: 43 | blog: | Boskovice
Rozbalit Rozbalit vše Re: BASH. Co je spatne na teto podmince.
No, to je ale pořád všechno totéž, co má varianta, jen delší :) Používat v takových případech proměnnou $? je zbytečné, není?
zoul@naima:~$ if true; then echo pravda; fi
pravda
zoul@naima:~$ if false; then echo pravda; fi
zoul@naima:~$ 
A když chce člověk přesměrovat stdout i stderr na stejné místo, může zrovna psát &>.
22.8.2007 07:58 bitguard
Rozbalit Rozbalit vše Re: BASH. Co je spatne na teto podmince.
coby nie... ale mne sa to zda prehladnejsie...
21.8.2007 17:28 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: BASH. Co je spatne na teto podmince.
Odpovědět | | Sbalit | Link | Blokovat | Admin
Takže chceš najít všechny soubory vyhovující dané masce a vypsat jejich obsah?
#!/usr/bin/python
import glob
for fn in glob.glob('/etc/*-release'):
    print file(fn).read()
21.8.2007 20:46 Ash | skóre: 53
Rozbalit Rozbalit vše Re: BASH. Co je spatne na teto podmince.
Python, omg :D Více viz bash.
21.8.2007 18:57 kvido
Rozbalit Rozbalit vše Re: BASH. Co je spatne na teto podmince.
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud je mi znamo, tak redhat-release by mel byt na fedore jen link na fedora-release, tzn. vypise se dvakrat totez. Coz je mozna lepsi nez kdyby se vypsalo dvakrat neco jineho - nebyl by pak problem s tim skriptem (jeho vystupem)? Takze bych linky ignoroval, nebo podminku zeslozitil tak, ze pokud existuje fedora-release, pouzije se bez ohledu na to, jake dalsi *-release existuji. Mozna to neni nejjednodussi, ale i za mesic z toho skriptu pujde poznat, proc to tam je.
21.8.2007 20:45 Ash | skóre: 53
Rozbalit Rozbalit vše Re: BASH. Co je spatne na teto podmince.
Odpovědět | | Sbalit | Link | Blokovat | Admin
for i in /etc/*-release; do
        if [ -a "$i" ]; then
	        printf "OS:\n\t`cat $i`\n"
        fi
done

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.