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.