Why can\'t I use exec 3>myfifo in the same manner in a bash script as I can in my terminal?
I\'m using named pipes to turn an awk filter into a simple \"se
I think I figured it out!
The exec commands do work, but bash itself closes all open file descriptors on exiting from the script. Adding sleep 5 to the end of the client shows that it takes 5 seconds for the server to finally shut down.
So the solution is just to open some file descriptor to my named pipes from some other terminal, and just keep them open, e.g. in terminal 3:
$ exec 3>to_server; exec 4
or, in the server terminal/script itself:
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();}' from_server &
AWKPID=$!
exec 3>to_server; exec 4