Suivi de "whatis" renvoie 0 pour les commandes manquantes , J'essaie de modifier /usr/bin/whatis pour renvoyer un code de sortie différent de zéro après avoir entré une commande inappropriée. Mon approche consiste à ajouter une variable de retour dans le segment suivant et à renvoyer cette variable à la fin de la boucle.
while [ "$1" != "" ]
do
found=0
for d in /var/cache/man $manpath /usr/lib
do
if [ -f $d/whatis ]
then
if grep -"$grepopt1" "$grepopt2""$1" $d/whatis
then
found=1
fi
fi
done
if [ $found = 0 ]
then
echo "$1: nothing appropriate"
**code=1**
fi
shift
done | eval ${PAGER:-more -E}
**return $code**
Cependant, depuis le while la boucle est canalisée dans eval, il est exécuté dans un sous-shell afin code ne sera pas attribué en dehors de la while boucle. j'ai essayé plusieurs différent les méthodes Cependant, il s’agit de canaliser une valeur dans le while boucle, pas de piping une valeur de la while boucle.
Une solution de contournement que j'ai trouvée consiste simplement à supprimer l'intégralité du eval déclaration, mais je voudrais une méthode qui préserve l'extensibilité initiale de whatis
$PIPESTATUSdonne l'erreur suivante$ whatis hi hi: nothing appropriate /usr/local/bin/whatis: line 92: return: can only `return' from a function or sourced scriptCependant, faireexit $PIPESTATUSau lieu dereturnfonctionne bien