Вы можете использовать любой из трех методов. Один из них иллюстрируется ответом dtmilano , использующим полную под-оболочку и круглые скобки, но будьте осторожны с предыдущим выводом:
outfile=/$myotherdir/$file.output
for file in $mydir/*
do
(
...commands...
) >> $outfile
...other commands with output going elsewhere...
done
Или вы можете использовать фигурные скобки для группировки перенаправления ввода / вывода без запуска под-оболочки:
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
Обычно я использую нотацию { ... }
, но в однострочном сценарии она капризна; }
должен появиться там, где может начинаться команда:
{ ls; date; } >/tmp/x37
Здесь нужна вторая точка с запятой.