web-dev-qa-db-fra.com

supprimer les messages d'erreur du script shell

Dans mon script Shell, j'ai eu ces lignes:

rm tempfl.txt
rm tempfl2.txt

Si ceux-ci n'existent pas, je reçois les messages d'erreur suivants:

rm: tempfl2.txt: No such file or directory
rm: tempfl.txt: No such file or directory

Existe-t-il un moyen de ne supprimer que ces messages même s'ils n'apparaissent pas toujours, car les fichiers peuvent exister?

33

Vous avez deux options:

Supprimer les avertissements rm

$ rm tempfl.txt 2> /dev/null

Redirige la sortie du script vers /dev/null

$ ./myscript.sh 2> /dev/null

Ce dernier a l'inconvénient de manquer tous les autres messages d'avertissement produits par votre script.

53
kamituel

Essayez cette commande:

rm -f tempfl.txt

l'option -f agit comme ceci:

-f, --force  ignore nonexistent files, never Prompt

La commande ne signale pas non plus de code d'erreur non nul si le fichier n'existe pas.

5
Pierluigi Vernetto

vous devriez rediriger tous les messages d'erreur vers/dev/null comme 

rm tempfl2.txt 2> /dev/null
5
developer

Lorsque les autres réponses indiquent, vous pouvez utiliser command 2> /dev/null pour supprimer la sortie d'erreur de command 

Mais que se passe-t-il ici? 

> est l'opérateur utilisé pour rediriger la sortie. 2 est une référence au flux de sortie d'erreur standard, c'est-à-dire 2> = sortie d'erreur de redirection.

/dev/null est le 'périphérique nul' qui englobe toutes les entrées qui lui sont fournies. Vous pouvez combiner les deux pour supprimer efficacement la sortie d'une commande. 

Référence complète:

  • > /dev/null jeter stdout
  • 1> /dev/null jeter stdout
  • 2> /dev/null jeter stderr
  • &> /dev/null jeter à la fois stdout et stderr
3
davnicwil

Ajout aux réponses ci-dessus: Il est probablement préférable de conserver les messages d'erreur (comme une autorisation refusée ou une autre). Testez l’existence du fichier avant de le supprimer:

[ -f file.txt ] && rm file.txt

Cela suppose une Bourne comme Shell, par exemple, bash. Ce qui précède présente l’avantage supplémentaire de ne pas essayer de supprimer un répertoire, ce que rm ne peut pas faire.

2
Michael Lemke

Nous pouvons utiliser 2> /dev/null pour supprimer l’erreur de sortie et || true pour garantir un état de sortie réussi:

rm foo
=> rm: cannot remove ‘foo’: No such file or directory

rm foo 2> /dev/null
echo $?
=> 1

rm foo 2> /dev/null || true
echo $?
=> 0

Si vous utilisez la commande dans un script shell, un fichier makefile, etc., vous en avez peut-être besoin.

0
Fernando Almeida