bash: como redirecionar stdin / stderr e depois reverter fd's?
Eu quero que um script redirecione stdin e stderr para um arquivo, faça várias coisas, desfaça esses redirecionamentos e execute uma ação no conteúdo do arquivo. Estou tentando
function redirect(){
exec 3>&1
exec 4>&2
exec 1>outfile 2>&1
}
function undirect(){
exec 1>&3
exec 2>&4
}
echo first
redirect
echo something
cat kjkk
undirect
if some_predicate outfile; then echo ERROR; fi
O que parece fazer o que eu quero, mas parece bastante complexo. Existe uma maneira mais limpa / clara de fazer isso?