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
la source
$PIPESTATUS
donne l'erreur suivante$ whatis hi hi: nothing appropriate /usr/local/bin/whatis: line 92: return: can only `return' from a function or sourced script
Cependant, faireexit $PIPESTATUS
au lieu dereturn
fonctionne biencode
une fois le tuyau terminé, c’est ce que j’ai mis dans ma réponse. Si vous voulez que quelqu'un écrive votre script, posez une nouvelle question. De plus, si vous le souhaitez, n'hésitez pas à modifier votre question et / ou ma réponse. Ou postez votre propre réponse.