Même lorsque /tmp
n'a pas de fichier appelé something
en le cherchant avec find
retournera 0 :
$ find /tmp -name something
$ echo $?
0
Comment puis-je obtenir un statut de sortie non nul lorsque find
ne trouve rien ?
Même lorsque /tmp
n'a pas de fichier appelé something
en le cherchant avec find
retournera 0 :
$ find /tmp -name something
$ echo $?
0
Comment puis-je obtenir un statut de sortie non nul lorsque find
ne trouve rien ?
Dans ce cas, si find avait une erreur, il imprimerait le résultat dans /dev/null, renverrait une sortie non nulle, puis serait fixé à 0 par la commande test.
Je ne crois pas que ce soit vrai. Veuillez décrire votre exemple. S'il y a une erreur et que find sort, alors la chaîne sera vide et test retournera un résultat différent de zéro.
Je ne suis pas sûr de ce que votre exemple pourrait être, mais j'ai accidentellement omis -print -quit
qui pourrait répondre à votre préoccupation.
Voici un petit script que j'ai appelé test.py
. Elle améliore les autres méthodes affichées dans la mesure où elle renvoie un code d'erreur si un code est défini, et elle en définit un en plus si find n'a pas listé de fichiers :
from subprocess import Popen
import sys
p = Popen(['find'] + sys.argv)
out, err = p.communicate()
if p.returncode:
sys.exit(p.returncode)
if not out:
sys.exit(1)
Voici la sortie de la ligne de commande :
$ python test.py . -maxdepth 1 -name notthere
$ echo $?
1
$ find . -maxdepth 1 -name notthere
$ echo $?
0
$ find . -failedarg
find: unknown predicate `-failedarg'
$ echo $?
1
Ensuite, pour un résultat où find avait des erreurs mais trouvait des fichiers :
$ ls -lh
$ d--------- 2 jeff users 6 Feb 6 11:49 noentry
$ find .
.
./noentry
find: `./noentry': Permission denied
$ echo $?
1
$ find . | egrep '.*'
.
./noentry
find: `./noentry': Permission denied
$ echo $?
0
python ../test.py
../test.py
$ echo $?
1
Ensuite, si vous voulez la liste des fichiers, vous pouvez faire usage de -print 0
transmis à find
et diviser la variable de sortie sur les nuls, ou vous pouvez simplement ajouter une instruction d'impression pour cela.
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.
2 votes
Si votre objectif est de passer la liste des noms de fichiers à une commande qui se comporte mal lorsqu'elle n'a pas d'arguments, une astuce pratique est d'ajouter simplement
/dev/null
comme argument supplémentaire. Il est garanti d'être vide, donc si votre but est d'exécuterwc
c'est particulièrement utile. Ce n'est pas une réponse à tous les cas d'utilisation.