批量命令,用于重新检查输出重定向
当我想处理一堆tex文件时,我会使用
for f in *.tex; do latex "$f" ; done;
当我需要将输出重定向到另一个文件时,我该怎么办,例如catdvi?
以下不起作用:
for f in *.dvi ; do catdvi -e 1 -U $f > "${f%.dvi}.txt"; done;
我究竟做错了什么?
你忘了引用$f
,因此文件名可能因为文件名中的空格而得到了wordsplit。 我还建议使用./*.dvi
这样可以避免在文件名以-
开头时出现问题(这会使大多数命令将其视为一组选项而不是文件名)
for f in ./*.dvi; do catdvi -e 1 -U "$f" > "${f%.dvi}.txt"; done
或者也许组合两个循环
for f in ./*.tex; do base=${f%.tex}; latex "$f" && catdvi -e 1 -U "$base.dvi" > "$base.txt"; done
通过降低命令的复杂性来测试它。 先试试这个:
for f in *.dvi ; do catdvi -e 1 -U $f >> catdvi.txt; done;
如果可行,则问题在于动态文件名创建代码。 也许这会奏效:
for f in *.dvi ; do catdvi -e 1 -U $f > "${f%.dvi.txt}"; done;
f%试图做什么? 应该是$ f而不是?
for f in *.dvi ; do catdvi -e 1 -U $f > "${$f.dvi.txt}"; done;