Comando em lote que requer redirecionamento de saída

0

Quando eu quero processar um monte de arquivos tex, eu uso

for f in *.tex; do latex "$f" ; done;

O que eu faço quando preciso redirecionar a saída para outro arquivo, como no caso do catdvi?

O seguinte não funciona:

for f in *.dvi ; do catdvi -e 1 -U $f  > "${f%.dvi}.txt"; done;

O que estou fazendo de errado?

    
por deshmukh 20.07.2012 / 08:47

2 respostas

2

Você se esqueceu de citar $f , então o nome do arquivo provavelmente ficou cheio de palavras devido ao espaço em branco no nome do arquivo. Eu também sugiro usar ./*.dvi , pois isso evitará problemas se um nome de arquivo começar com - (o que fará com que a maioria dos comandos o trate como um conjunto de opções em vez de um nome de arquivo)

for f in ./*.dvi; do catdvi -e 1 -U "$f" > "${f%.dvi}.txt"; done

Ou talvez combine os dois loops

for f in ./*.tex; do 
    base=${f%.tex};
    latex "$f" &&
    catdvi -e 1 -U "$base.dvi" > "$base.txt";
done
    
por geirha 22.07.2012 / 13:53
0

Teste-o reduzindo a complexidade do comando. Tente isto primeiro:

for f in *.dvi ; do catdvi -e 1 -U $f >> catdvi.txt; done;

Se isso funcionar, o problema é com seu código de criação de nome de arquivo dinâmico. Talvez isso funcionasse:

for f in *.dvi ; do catdvi -e 1 -U $f > "${f%.dvi.txt}"; done;

O que o f% está tentando fazer? Isso deveria ser $ f?

for f in *.dvi ; do catdvi -e 1 -U $f > "${$f.dvi.txt}"; done;

    
por Tom 20.07.2012 / 14:47