Portál AbcLinuxu, 31. srpna 2025 09:53


Dotaz: BASH: Vkladani parametru prikazu ze souboru a konec radky

2.9.2005 23:44 Lukáš Rýdlo | skóre: 18 | blog: Silný kafe | Brno
BASH: Vkladani parametru prikazu ze souboru a konec radky
Přečteno: 276×
Odpovědět | Admin
Zdravim,

zkousel jsem si udelat jednoduchy skript v BASHi, ktery ma prevest vsechmy wavy v adresari na mp3 pomoci lame. Krome wavu mam v adresari i stejnojmene soubory, zakoncene sekvenci ".par", ktere v sobe obsahuji parametry pro vytvoreni ID3 tagu budouci "empetrojky". Skript vypada takhle:
#!/bin/bash

rm encode.log
rm encode.err

echo "----------------[ PREVADIM WAVy NA MP3 ]----------------"

for JMENO in `ls *.wav | sed -e "1,$ s/\.wav//g"`;
do
  lame -q 0 -m m --verbose `cat $JMENO.par` $JMENO.wav $JMENO.mp3 >> encode.log 2>> encode.err
  echo "(!) soubor $JMENO.wav zpracovan..."
  echo "--------------------------------------------------------"
done;
a v nejakem souboru.par je vzdy jen jeden radek, napr. --tt "J. Seger: Fuga a moll" --tc "pozitiv u sv. Michala"

Jenze lame mi neustale vraci, ze mam spatne parametry prikazu. Myslim si, ze mi tam to `cat $JMENO.par` odradkuje a tedy spusti prikaz pred predanim nazvu souboru.

Cili moje otazka: Jak mam vypsat obsah souboru, aniz by se pak odradkovalo nebo jak to odradkovani odstranit (sedem to asi nepujde, ze...)

Vrele diky za pomoc
θηριον ειμι
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

David Watzke avatar 2.9.2005 23:52 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: BASH: Vkladani parametru prikazu ze souboru a konec radky
Odpovědět | | Sbalit | Link | Blokovat | Admin
Sedem to půjde, pomocí regulárních výrazů.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
David Watzke avatar 2.9.2005 23:57 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: BASH: Vkladani parametru prikazu ze souboru a konec radky
vlastně nepůjde... jsem si to asi spletl s egrep
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
David Watzke avatar 3.9.2005 00:05 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: BASH: Vkladani parametru prikazu ze souboru a konec radky
Odstraňoval jsem s tím mezery, ale nevím jestli to umí přímo toto, napadlo mě, že to 100% umí echo s nějakou escape sekvencí (echo -e)... ale když je to v souboru :-/
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
3.9.2005 00:03 0
Rozbalit Rozbalit vše Re: BASH: Vkladani parametru prikazu ze souboru a konec radky
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zkusil bych pouzit vlastnost shellu, ze pomoci konstrukce ${PROMENA%%suf} odstrani priponu.
for JMENO in *.wav; do
  A=${JMENO%%.wav}
  echo $JMENO $A
  lame -q 0 -m m --verbose ${A}.par $JMENO ${A}.mp3
done
Prikaz cat aplikovany na promenou odradkuje, prikaz echo ne.
3.9.2005 00:15 Lukáš Rýdlo | skóre: 18 | blog: Silný kafe | Brno
Rozbalit Rozbalit vše Re: BASH: Vkladani parametru prikazu ze souboru a konec radky
Konstrukci ${PROMENA%%suf} urcite zkusim, je to elegantnejsi nez volat sed, akorat pak to ${A}.par bude asi problem. lame ma syntaxi lame [options] input.file output.file, takze predpokladam, ze asi bude povazovat ${A}.par za dalsi parametr (v horsim pripade za vstupni soubor), misto toho aby prevzal ty parametry, ktere jsou uvnitr toho souboru...

Obecne tedy zustava problem, jak nacpat parametry ze souboru na prikazovou radku, aniz by se po nich odentrovalo...
θηριον ειμι
3.9.2005 02:11 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: BASH: Vkladani parametru prikazu ze souboru a konec radky
Problém není v odřádkování. Problém je v tom, že se po command substitution provede word splitting (viz kapitolu EXPANSION v bash(1)), takže se ty věci v uvozovkách rozpadnou na kusy. Nejjednodušší řešení asi je použít eval:
for wav in *.wav; do
  base=${wav%%.wav}
  eval lame -q 0 -m m --verbose $(<$base.par) $wav $base.mp3
done
Alternativní řešení je např. vygenerovat pomocný skript a ten pak spustit.

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.