mkfifo fifo
echo 1 >fifo は最後のコマンドでブロックします。
これについての説明はgnu libcにあります
ただし、入出力操作を行う前に、両端を同時に開いておく必要があります。通常、読み取り用に FIFO を開くと、他のプロセスが書き込み用に同じ FIFO を開くまでブロックされます。逆の場合も同様です。
しかし
>mkfifo fifo
>exec 5<>fifo
>echo 1 >&5
ブロックせず、うまく機能します。繰り返しになりますが、AFAIKシェルはdup2を使用してリダイレクトを行いますが、これはどのように違いますか?
実際、質問を定式化したときに答えを見つけました。以下に掲載します。