Portál AbcLinuxu, 12. května 2025 11:12

Dotaz: úprava proměnné v bashi

9.7.2006 11:06 cz_motyl | skóre: 19
úprava proměnné v bashi
Přečteno: 147×
Odpovědět | Admin
Zdravím všechny diskutující. Začínám se učit skriptování v bashi a v této chvíli jsem narazil na jeden otazník.

Z jedné aplikace mi byla naplněna jedna proměnná obecně takto: promenna = /dir_1/dir_2/dir_3/file.txt Počet úrovní adresářů může být dva a více. Poznamenávám, že soubor fyzicky v cestě existuje.

Potřebuji dvě věci: 1/ do nějaké nové proměnné vložit obsah výše uvedené proměnné bez konkrétního souboru, tzn. jen tu vlastní cestu /dir_1/dir_2/dir_3

2/ do nějaké nové proměnné vložit název posledního adresáře, v němž je uložen výše uvedený soubor file.txt bez lomítek, tzn. dir_3

Je to možné nějak zařídit na úrovni scriptu v bashi? Děkuji za jakýkoliv nápad.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

9.7.2006 11:11 Kníže Ignor | skóre: 19 | blog: stoupa
Rozbalit Rozbalit vše Re: úprava proměnné v bashi
Odpovědět | | Sbalit | Link | Blokovat | Admin
cesta=`basename $promenna`
adresar=`sed 's#.*/##'`
Jestli máš zálohu mého blogu, tak mi ji pošli. Nějak jsem si ho smazal :-)
9.7.2006 11:25 Kníže Ignor | skóre: 19 | blog: stoupa
Rozbalit Rozbalit vše Re: úprava proměnné v bashi
chtěl jsem napsat dirname :-)
Jestli máš zálohu mého blogu, tak mi ji pošli. Nějak jsem si ho smazal :-)
9.7.2006 11:12 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: úprava proměnné v bashi
Odpovědět | | Sbalit | Link | Blokovat | Admin
(a) přečíst si dokumentaci

(b) dirname, basename

(c) ${p%/*}, ${p##*/}

9.7.2006 14:26 cz_motyl | skóre: 19
Rozbalit Rozbalit vše Re: úprava proměnné v bashi
Odpovědět | | Sbalit | Link | Blokovat | Admin
skvele panove, Vase prispevky mi pomohly, prestoze ten druhy problem jsem musel vyresit cyklem.

Poprosil bych jeste o jeden tip: jak zajistim vystup prikazu echo soucasne na display a soucasne do souboru? Pro jistotu poznamenavam, ze script budu poustet i pres prikaz screen. Diky.
9.7.2006 14:33 r_b_l | skóre: 3
Rozbalit Rozbalit vše Re: úprava proměnné v bashi
dát do roury za echo tee - čte stdin a zapisuje na stdout a do file, více man tee
9.7.2006 14:37 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: úprava proměnné v bashi
Proč cyklem? Buď
  path=`dirname "$file"`
  path=`basename "$path"`
nebo
  path="${file%/*}"
  path="${path##*/}"
9.7.2006 15:12 cz_motyl | skóre: 19
Rozbalit Rozbalit vše Re: úprava proměnné v bashi
dirname a basename vraci bud adresar (bez souboru) nebo jen ten soubor (bez cesty) Vami uvedeny druhy priklad dela totez. Toto tedy resi muj prvni problem. Jenze ja jeste potrebuji vratit jmeno adresare, v kterem je ten soubor, ne vsak celou cestu k tomuto adresari. Takze napr. z /dir_1/dir_2/dir_3/dir_4/file.txt potrebuji jen a jen "dir_4"

Provedu-li opakovane "${file%/*}", kde file je cela cesta k souboru file.txt, dostanu nakonec pozadovane.
9.7.2006 15:15 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše Re: úprava proměnné v bashi
[15:11:21]-[~]-
[tsunami@vodik]$ prom=/cesta/k/souboru/soubor.txt

[15:11:35]-[~]-
[tsunami@vodik]$ prom=`dirname $prom`

[15:11:45]-[~]-
[tsunami@vodik]$ echo $prom
/cesta/k/souboru

[15:11:53]-[~]-
[tsunami@vodik]$ echo ${prom##*/}
souboru
-- Nezdar není hanbou, hanbou je strach z pokusu.
9.7.2006 15:22 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: úprava proměnné v bashi
Podruhé už ale nepracujete s původní hodnotou, ale už jen s tím adresářem. Zkuste si to.
9.7.2006 15:48 cz_motyl | skóre: 19
Rozbalit Rozbalit vše Re: úprava proměnné v bashi
panove, mate pravdu, funguje to presne tak, jak uvadite diky

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.