Je travaille sur un script qui prend 1 argument de chaîne et un fichier. Je le veux afin que si un fichier soit mis dans celui-ci n'existe pas, il affichera le nom " le nom de fichier em> ne peut pas être lu" Message " Cette partie fonctionne, mais il affiche également un" Grep: grep.txt: aucun message de fichier ou de répertoire de ce type. Existe-t-il un moyen d'arrêter le message GREP d'afficher et de mettre fin au script si la première instruction si elle est vraie? P> #! /bin/sh
if [ ! -f "$2" ]
then
echo "$0" cannot be read 1>&2
fi
if [ $# -eq 2 ]
then
grep "$1" $2
else
echo there is more or less than 2 arguments 1>&2
fi
3 Réponses :
Vous pouvez ajouter / dev / null dans la commande grep, il supprimera la partie d'erreur.
grep "$1" $2 2>/dev/null
Quitter le script avec un code de sortie non nul pour indiquer une panne et l'arrêter de continuer sur le grep code>.
if [ ! -f "$2" ]
then
echo "$0" cannot be read 1>&2
exit 1
fi
Vous pouvez rediriger toutes les erreurs de grep, par exemple:
(Le qui introduit une condition de course, cependant: si Le fichier disparaît lorsque votre script est en cours d'exécution, il pourrait toujours exister lorsque vous vérifiez qu'il existe, mais être parti à l'époque Vous pouvez gérer cela en vérifiant le Statut de sortie ... p> IMHO, dans cet exemple, il serait préférable de simplement laisser grep "1 $" $ "$ 2 2> / dev / null code> p>
2> < / code> signifie une erreur standard de redirection, par opposition à la sortie standard avec
> code> ou
1> code>). p>
grep code> exécute. p>
grep code> Imprimer l'erreur. P> p>