Comment supprimer les messages d'erreur de cp?


13

Je cherche actuellement des moyens de supprimer la commande d'erreur sous Linux, en particulier la commande cp.

Je fais:

root@ubuntu:~$ cp /srv/ftp/201*/wha*/*.jj ~/.
cp: cannot stat `/srv/ftp/201*/wha*/*.jj': No such file or directory

Comment supprimer le message d'erreur qui s'imprime à l'écran? C'est-à-dire que je ne veux pas voir ce message d'erreur sur mon moniteur.


1
juste pour info, la meilleure façon de vérifier les erreurs est les codes de sortie. Le piping STDERR vers / dev / null est standard et supprimera toute indication visuelle d'erreurs, mais la vérification d'un état de retour non nul vous permettra de savoir s'il y a eu une erreur ou non, du moins c'est ainsi que cela est censé être ...
— Nathan McCoy

Votre question n'est pas claire. Voulez-vous masquer tous les messages d'erreur de cp? Ou voulez-vous ne pas avoir de message d'erreur si le caractère générique ne correspond à aucun fichier? Ou d'autres critères?
— Gilles 'SO- arrête d'être méchant'

Réponses:


38

Pour supprimer la sortie d'erreur dans bash, ajoutez 2>/dev/nullà la fin de votre commande. Cela redirige le descripteur de fichier 2 (STDERR) vers /dev/null. Il existe des constructions similaires dans d'autres coquilles, bien que la construction spécifique puisse varier légèrement.


Je me demande pourquoi je n'ai jamais pensé à ça xx
— Abdul

8

Redirigez le message d'erreur (STDERR) vers /dev/null:

root@ubuntu:~$ cp /srv/ftp/201*/wha*/*.jj ~/. 2>/dev/null

Exemple:

$ cp /srv/ftp/201*/wha*/*.jj ~/.  ##Error message gets printed
cp: cannot stat ‘/srv/ftp/201*/wha*/*.jj’: No such file or directory

$ cp /srv/ftp/201*/wha*/*.jj ~/. 2>/dev/null  ##No error message gets printed

5

Votre question n'est pas claire. La chose la plus raisonnable à faire serait de ne pas exécuter cpdu tout lorsque le caractère générique ne correspond à aucun fichier, plutôt que d'exécuter cpet de masquer le message d'erreur.

Pour ce faire, si le shell est bash, définissez l' nullgloboption de sorte que le motif générique se développe à rien s'il ne correspond à aucun fichier. Vérifiez ensuite si le motif s'est étendu à quelque chose et n'appelez pas cpdans ce cas.

#!/bin/bash
shopt -s nullglob
files=(/srv/ftp/201*/wha*/*.jj)
if [[ ${#files[@]} -ne 0 ]]; then
  cp "${files[@]}" ~
fi

En clair, testez si le glob est resté inchangé, pointant vers un fichier inexistant.

set -- /srv/ftp/201*/wha*/*.jj
if ! [ -e "$1" ] && ! [ -L "$1" ]; then
  cp "$@" ~
fi

C'est la technique nécessaire si vous ne voulez pas que cp lance une erreur depuis un script shell - ou du moins, je ne suis pas un expert, mais c'est celui qui semble fonctionner.
— NessBird

0

Ajoutez ceci dans ~ / .bashrc:

alias cp='cp 2> /dev/null'

puis:

source ~/.bashrc

2
Il me semble stupide de recommander que cela soit fait de façon permanente. Il semble comme une bien meilleure idée de conduite juste stderrà /dev/nullquand la sortie d'erreur est indésirable. Ou en utilisant un nom différent de cp.
— HalosGhost

Je suis d'accord avec vous mais c'est une solution pour quelqu'un qui ne veut pas voir de messages d'erreur sur son moniteur cp.
— M122

-1

vous pouvez utiliser:
1 Option: 2>/dev/null.
Option 2: 2>&1
En plus vous pouvez l'utiliser à la fin de votre commande, cela supprimera les messages d'erreur:

Exemple ici-

$cp nofile.txt b.txt > log.txt 2>/dev/null

Ici, vous ne pouvez pas récupérer d'informations sur le message d'erreur. Ex2:

$cp nofile.txt b.txt > log.txt 2>&1

ici, vous pouvez récupérer des informations dans le fichier journal ci-dessous:

$ cat log.txt
cp: cannot stat `nofile.txt': No such file or directory
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.