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?

questionAnswers(2)

yourAnswerToTheQuestion