Portál AbcLinuxu, 10. května 2025 05:50

Dotaz: Soubor s mezerou v BASHI

31.8.2008 13:09 Paulus | skóre: 15 | Jihlava
Soubor s mezerou v BASHI
Přečteno: 299×
Odpovědět | Admin
Hezký den. Napsal jsem si jednoduchý skriptík, který přidává titulky do videa. Jako jeden z parametrů je název toho filmového souboru. Problém ale nastane, pokud jsou v názvu souboru mezery. Píšu to nějak takhle:
rozmery=`mplayer "$1" -frames 0 | grep VIDEO`
Pokud je jako první parametr
soubor_s mezerou.avi,
tak mplayer zkouší přehrát nejdřív soubor_s a pak mezerou.avi. Co s tím?
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

31.8.2008 13:22 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Soubor s mezerou v BASHI
Odpovědět | | Sbalit | Link | Blokovat | Admin
Před zavoláním mplayeru si nastav IFS, tak aby ti neoddělovalo argumenty mezerou a po zavolání mplayeru jí vrať zpět (pokud je potřeba).
Intel meltdown a = arr[x[0]&1]; karma | 帮帮我,我被锁在中国房
31.8.2008 17:33 Paulus | skóre: 15 | Jihlava
Rozbalit Rozbalit vše Re: Soubor s mezerou v BASHI
To asi nebudu umět. Zkoušel jsem IFS="_" a pak následně echo $IFS, ale je vidět, že je tam pořád mezera a konec řádku...
31.8.2008 18:07 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Soubor s mezerou v BASHI
Pardon asi jsem si to špatně přečetl :-( IFS dělá přesný opak. Zkus proměnnou $@, tam jsou všechny parametry (za předpokladu, že je jméno souboru jediný předávaný parametr. Jinak by bylo nutno postupně testovat jednotlivé argumenty zda dávají dohromady existující soubor (a ani to by nebylo 100% účinné). Pak ještě existuje program getopts který dělá velkou část parsování za programátora.
31.8.2008 13:55 Jan Šimák | skóre: 37 | Hradec Králové
Rozbalit Rozbalit vše Re: Soubor s mezerou v BASHI
Odpovědět | | Sbalit | Link | Blokovat | Admin
A nebo při volání scriptu název videa s mezerou uzavři do dvojitých uvozovek.
31.8.2008 14:54 Paulus | skóre: 15 | Jihlava
Rozbalit Rozbalit vše Re: Soubor s mezerou v BASHI
Jestli myslíš:
skript.sc "prvni parametr.avi",
tak to bohužel nezafunguje a výsledek je stejný jako bez uvozovek.
31.8.2008 18:29 Jan Šimák | skóre: 37 | Hradec Králové
Rozbalit Rozbalit vše Re: Soubor s mezerou v BASHI
hm, tak nevím jestli je problém přímo v souboru s mezerou. Testnul jsem si to a výsledek je takový:
#!/bin/bash
# set -x

rozmery=`mplayer "$1" -frames 0 | grep VIDEO`
echo "$rozmery"

1) volání: $ ./run.sh "svehla k.wmv" a výstup:
Can't open joystick device /dev/input/js0: No such file or directory
Can't init input joystick
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.
open: No such file or directory
[MGA] Couldn't open: /dev/mga_vid
open: No such file or directory
[MGA] Couldn't open: /dev/mga_vid
[VO_TDFXFB] Can't open /dev/fb0: No such file or directory.
s3fb: can't open /dev/fb0: No such file or directory
VIDEO:  [WMV3]  360x288  24bpp  1000.000 fps  204.4 kbps (25.0 kbyte/s)

2) volání $ ./run.sh svehla\ k.wmv a výstup:
Can't open joystick device /dev/input/js0: No such file or directory
Can't init input joystick
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.
open: No such file or directory
[MGA] Couldn't open: /dev/mga_vid
open: No such file or directory
[MGA] Couldn't open: /dev/mga_vid
[VO_TDFXFB] Can't open /dev/fb0: No such file or directory.
s3fb: can't open /dev/fb0: No such file or directory
VIDEO:  [WMV3]  360x288  24bpp  1000.000 fps  204.4 kbps (25.0 kbyte/s)
ani v jednom případě mplayer nehlásí nic o tom, že by měl problém s interpretací prvního pozičního parametru.
31.8.2008 18:46 Paulus | skóre: 15 | Jihlava
Rozbalit Rozbalit vše Re: Soubor s mezerou v BASHI
ANO! Chyba je mezi klávesnicí a židlí. :-) Ten skript jsem měl uloženej v ~/bin, nevšiml jsem si ale, že mám nastavenej stejnojmennej alias, kterej vede jinam. Problém byl v tom, že v tom jiném souboru chybí uvozovky u $1. Vypadá to teda:
rozmery=`mplayer $1 -frames 0 | grep VIDEO`.
Tím se všechno vysvětluje. Díky moc za pomoc a omlouvám se, že tady dělám vlny....
31.8.2008 14:58 1john2 | skóre: 35 | blog: jo12hn | zlín, brno
Rozbalit Rozbalit vše Re: Soubor s mezerou v BASHI
Odpovědět | | Sbalit | Link | Blokovat | Admin
a co pouzit
 nazev\ souboru\ s\ mezerou.avi ?
aneb vzdy pred mezeru dat obracenou zavorku
31.8.2008 15:00 1john2 | skóre: 35 | blog: jo12hn | zlín, brno
Rozbalit Rozbalit vše Re: Soubor s mezerou v BASHI
hmm tak sem si to znova precet, tohle nezabere ve skriptu omlouvam se

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.