我可以将部分bash脚本输出传输到文件吗?我可以管道到文件和标准输出?

时间:2011-10-05 15:51:01

标签: bash ksh sh

我很确定我以前见过这个,但我似乎无法通过谷歌找到它。

for file in $mydir/*
do
    #redirect the rest to $myotherdir/$file.output.
    echo this should go to the $myotherdir/$file.output.
done

如果我可以使用tee而不是重定向,那么它也会很棒,因此它会转到该文件和stdout。

2 个答案:

答案 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

那里需要第二个分号。