Exemple 1 : calcul
/usr/bin/bc |& # co-process evaluation d'expressions
print -p "scale = 2" # 2 chiffres derrière la virgule
while read op'?opération> '
do if [[ "$op" = "quit" ]] # faire quit pour sortir
then exit # arrêt du père et du fils
fi
print -p $op # entrer l'opération
read -p rep # lire la réponse
print "\t= $rep"
done
opération> (4+6)/6
= 1,66
opération> 4+6/6
= 5,00
opération> quit
(typeset -i h=100 b=0 c=0
x=$(( 100*$RANDOM/32767 ))
while :
do read -r c
if (( c >= b && c <= h ))
then if (( c < x ))
then b=$c
elif (( c > x ))
then h=$c
else b=$c;h=$c
fi
fi
print $b $h
done)|&
typeset -i B H c
while read c'?essai> '
do print -p $c
read -p B H
if (( B == H ))
then print "trouve !"
exit
else print "compris entre $B et $H"
fi
done
typeset -i rc=0
#--- lancement du coprocessus d'action à distance
( while read -r args
do [[ $args = "end" ]] && break
rsh $machine2 -l $utilisateur "($args >/dev/null;print \$?)"
done
)|&
#--- création des dumps durant les rechargements sur machine2
oldLIB='null'
for LIB in $liste_des_librairies
#--- lancement d'un dump
dump $LIB
if [[ "$oldLIB" != "null" ]]
then echo "$oldLIB - Attente de fin de rechargement sur $machine2"
#--- lecture du code retour du rechargement dans le coprocessus
read -p rc
if (( $rc ))
then traitement_erreur $oldLIB $rc
else echo "$oldLIB - rechargement librairie OK"
fi
fi
#--- transfert sur machine2
transferer $LIBtar
if (( $rc ))
then echo "$LIB - Problème durant la recopie vers $machine2"
else echo "$LIB - Lancement du rechargement sur $machine2"
#--- Ecriture dans le coprocessus pour rechargement de la LIB sur machine2
print -p "$recharger $LIB"
fi
oldLIB=$LIB
done
#--- Terminer le traitement du rechargement en cours avant de poursuivre
if [[ "$oldLIB" != "null" ]]
then echo "$oldLIB - Attente de fin de rechargement sur $machine"
#--- lecture du code retour du rechargement dans le coprocessus
read -p rc
if (( rc ))
then traitement_erreur $oldLIB $rc
else echo "$oldLIB - rechargement librairie OK\n"
fi
fi
#--- Arréter le co-processus
print -p "end"