Décomposons la >> /dev/null 2>&1
déclaration en plusieurs parties:
Partie 1: >>
redirection de sortie
Ceci est utilisé pour rediriger la sortie du programme et ajouter la sortie à la fin du fichier. Plus...
Partie 2: /dev/null
dossier spécial
Il s'agit d'un fichier spécial Pseudo-devices .
La commande ls -l /dev/null
vous donnera des détails sur ce fichier:
crw-rw-rw-. 1 root root 1, 3 Mar 20 18:37 /dev/null
Avez-vous observé crw
? Ce qui signifie qu'il s'agit d'un fichier pseudo-périphérique de type fichier de caractères spéciaux qui fournit un accès série.
/dev/null
accepte et rejette toutes les entrées; ne produit aucune sortie (renvoie toujours une indication de fin de fichier lors d'une lecture). Référence: Wikipedia
Partie 3: 2>&1
descripteur de fichier
Chaque fois que vous exécutez un programme, le système d'exploitation ouvre toujours trois fichiers, entrée standard, sortie standard et erreur standard comme nous le savons chaque fois qu'un fichier est ouvert, le système d'exploitation (du noyau ) renvoie un entier non négatif appelé descripteur de fichier . Le descripteur de fichier de ces fichiers est 0, 1 et 2, respectivement.
Dit donc 2>&1
simplement rediriger l'erreur standard vers la sortie standard.
&
signifie que tout ce qui suit est un descripteur de fichier, pas un nom de fichier.
En bref, en utilisant cette commande, vous dites à votre programme de ne pas crier pendant l'exécution.
Quelle est l'importance d'utiliser 2>&1
?
Si vous ne voulez pas produire de sortie, même en cas d'erreur produite dans le terminal. Pour expliquer plus clairement, considérons l'exemple suivant:
$ ls -l > /dev/null
Pour la commande ci-dessus, aucune sortie n'a été imprimée dans le terminal, mais que se passe-t-il si cette commande génère une erreur:
$ ls -l file_doesnot_exists > /dev/null
ls: cannot access file_doesnot_exists: No such file or directory
Bien que je redirige la sortie vers /dev/null
, elle est imprimée dans le terminal. C'est parce que nous ne redirigeons pas la sortie d'erreur vers /dev/null
, donc pour rediriger également la sortie d'erreur, il est nécessaire d'ajouter 2>&1
:
$ ls -l file_doesnot_exists > /dev/null 2>&1
>&- 2>&-
.