¿Cómo uso exec 3> myfifo en un script y no tengo echo foo> & 3 cierra la tubería?

¿Por qué no puedo usar exec 3> myfifo de la misma manera en un script bash que puedo en mi terminal?

Estoy usando tuberías con nombre para convertir un filtro awk en un simple "servidor", que debería ser capaz de tomar la entrada de texto de los clientes, filtrarlo y vaciarlo en NUL.

En la terminal 1, el servidor se ejecuta así:

$ mkfifo to_server from_server;
$ while true; do 
  # Really, this awk script BEGIN's with reading in a huge file, 
  # thus the client-server model
  awk '{sub("wrong", "correct");print;} /\0/ {fflush();}' <to_server >from_server; 
  echo "restarting..."; 
done

Y tengo un script simple que debería poner la entrada, que termina con un NUL, en la tubería de entrada, y leer desde la tubería de salida, y luego salir, sin enviar un EOF al servidor (no queremos el servidor para reiniciar):

#!/bin/bash
# According to http://mywiki.wooledge.org/BashFAQ/085 , using 
# `exec 3>mypipe; echo foo >&3;` instead of `echo foo >mypipe` 
# should ensure that the pipe does not get the EOF which closes it:
exec 3>to_server;
exec 4<from_server;

cat >&3;
echo -e '\0' >&3;
while read -rd '' <&4; do echo -n "$REPLY"; break; done;

Ahora, si en la terminal 2 hago$ echo This is wrong | bash client.sh, Yo obtengoThis is correct back, pero la terminal 1 me muestra que el servidor se reinicia. Sin embargo, si ejecuto los comandos desde client.sh desde la terminal 2, no se reinicia.

Parece estar relacionado con los comandos exec, ya que también puedo hacer

$ exec 3>to_server; exec 4<from_server;
$ echo "This is wrong" | sh client.sh

y no se reinicia. Si yo entonces

$ exec 3>&-; exec 4<&-

(que por supuesto lo reinicia una vez) y hacer

$ echo "This is wrong" | sh client.sh

it se reinicia cada vez. Entonces parece que los comandos exec en el script no tienen efecto. Sin embargo, poniendols /proc/$$/fd/ después de que los comandos exec en el script muestren que de hecho apuntan a las tuberías correctas.

¿Que me estoy perdiendo aqui

Respuestas a la pregunta(2)

Su respuesta a la pregunta