URL: https://linuxfr.org/forums/programmation-shell/posts/mkfifo-et-erreur-broken-pipe Title: mkfifo et erreur 'Broken Pipe' Authors: Mildred Date: 2007年01月21日T10:45:50+01:00 Tags: Score: 0 Bonsoir, J'utilise la version svn de gajim (pour mon jabber). Donc j'ai un petit script shell 'gajom-svn' qui met à jour ma copie locale depuis le svn et si modification il y a eu, recompile les modules nécessaires. De plus, pour que je puisse voir ce qui se passe, j'ai décidé de rediriger la sortie de toutes les commandes (svn, compilation, gajim) vers une pipe (que je crée au début) et de lancer un xterm en background qui va executer un `tail -f` sur cette pipe. Mon problème : Lorsque je ferme le terminal avant que gajim soit lancé, gajim ne se lance pas. Et si je ferme le terminal lorsque gajim est lancé, gajim reçoit l'exception IO.Broken_Pipe Ma question : comment faire en sorte que lorsqu mon xterm (avec mon tail -f dedans) se ferme le restecontinue a s'exécuter ? Voici mon script : `#! /usr/bin/env bash svn_revision(){ svn info | grep '^Revision: ' | cut -d' ' -f2 } fifo="/tmp/gajim-svn-$$" rm -f "$fifo" mkfifo "$fifo" #exec >"$fifo" 2>"$fifo" #zenity --text-info --title="Gajim SVN" --filename="$fifo" & xterm -title "Gajim SVN log" -e tail -n +0 -f "$fifo" & echo ">>> Start Gajim" >"$fifo" 2>&1 echo ">>> Using FIFO $fifo" >"$fifo" 2>&1 cd ~/.local/opt/ >"$fifo" 2>&1 if [ -d gajim_svn ]; then cd gajim_svn >"$fifo" 2>&1 oldrev="`svn_revision 2>"$fifo"`" echo ">>> SVN at revision $oldrev. updating" >"$fifo" 2>&1 svn up >"$fifo" 2>&1 newrev="`svn_revision 2>"$fifo"`" echo ">>> SVN updated at revision $newrev." >"$fifo" 2>&1 else echo ">>> Checking out SVN tree from: svn://svn.gajim.org/gajim/trunk" >"$fifo" 2>&1 svn co svn://svn.gajim.org/gajim/trunk gajim_svn >"$fifo" 2>&1 cd gajim_svn >"$fifo" 2>&1 oldrev="`svn_revision 2>"$fifo"`" newrev="$oldrev" echo ">>> SVN revision: $newrev" >"$fifo" 2>&1 fi if [ "a$oldrev" != "a$newrev" ]; then echo ">>> SVN tree updated" >"$fifo" 2>&1 echo ">>> ./autogen.sh" >"$fifo" 2>&1 ./autogen.sh >"$fifo" 2>&1 echo ">>> make" >"$fifo" 2>&1 make >"$fifo" 2>&1 fi echo ">>> Run Gajim: ./launch.sh (argv0: gajim-svn)" >"$fifo" 2>&1 exec -a gajim-svn ./launch.sh >"$fifo" 2>&1 ` Merci pourtout éclaircissement. Mildred