我很确定我以前见过这个,但我似乎无法通过谷歌找到它。
for file in $mydir/*
do
#redirect the rest to $myotherdir/$file.output.
echo this should go to the $myotherdir/$file.output.
done
如果我可以使用tee
而不是重定向,那么它也会很棒,因此它会转到该文件和stdout。
答案 0 :(得分:1)
我认为这就是你想要的
for file in $mydir/*
do
(
commands
...
) > /$myotherdir/$file.output
echo this should go to the $file > $file
done
答案 1 :(得分:1)
您可以使用至少三种技术中的任何一种。一个用dtmilano的答案来说明,使用完整的子shell和括号,但要小心破坏以前的输出:
outfile=/$myotherdir/$file.output
for file in $mydir/*
do
(
...commands...
) >> $outfile
...other commands with output going elsewhere...
done
或者您可以使用大括号对I / O重定向进行分组,而无需启动子shell:
outfile=/$myotherdir/$file.output
for file in $mydir/*
do
{
...commands...
} >> $outfile
...other commands with output going elsewhere...
done
或者您有时可以使用exec
:
exec 1>&3 # Preserve original standard output as fd 3
outfile=/$myotherdir/$file.output
for file in $mydir/*
do
exec 1>>$outfile
...standard output
exec 1>&3
...other commands with output going to original stdout...
done
我通常使用{ ... }
符号,但它在1行场景中是胡思乱想的; }
必须出现在命令可以开始的位置:
{ ls; date; } >/tmp/x37
那里需要第二个分号。