Use o exec
incorporado com um redirecionamento, mas nenhum comando para redirecionar os descritores de arquivos do shell. Se você quiser restaurar o destino original, terá que salvá-lo em outro descritor.
exec 3>&1 >foo.txt
for x in *; do
print $x
done
exec >&3 3>&-
Quando o escopo do redirecionamento é uma parte do código, é mais simples colocar o redirecionamento em torno desse pedaço de código.
for x in *; do
print $x
done >foo.txt
Se você quiser aplicar um redirecionamento a uma sequência de instruções, coloque-o entre chaves.
{
for x in *; do
print $x
done;
echo 'one more line'
} >foo.txt
Essas construções existem em todos os shells do tipo Bourne / POSIX, não apenas no zsh.