tl; dr
Chercher http://www.google.com
en arrière - plan et jeter le stdout
et stderr
.
curl http://www.google.com > /dev/null 2>&1 &
est le même que
curl http://www.google.com > /dev/null 2>/dev/null &
Les bases
0
, 1
et 2
représentent les descripteurs de fichier standard dans les systèmes d’exploitation POSIX . Un descripteur de fichier est une référence système à (fondamentalement) un fichier ou un socket .
La création d'un nouveau descripteur de fichier en C peut ressembler à ceci:
fd = open("data.dat", O_RDONLY)
La plupart des commandes système Unix prennent certaines entrées et transmettent le résultat au terminal. curl
va chercher ce qui se trouve à l'URL spécifiée ( google dot com ) et afficher le résultat stdout
.
La redirection
Comme vous l' avez dit <
et l' >
habitude de rediriger la sortie d'une commande à un autre endroit, comme un fichier.
Par exemple, dans ls > myfiles.txt
, ls
récupère le contenu du répertoire en cours et >
redirige sa sortie myfiles.txt
(si le fichier n'existe pas, il est créé, sinon écrasé, mais vous pouvez utiliser >>
plutôt que d' >
ajouter au fichier). Si vous exécutez la commande ci-dessus, vous remarquerez que rien n’est affiché sur le terminal. Cela signifie généralement le succès sur les systèmes Unix. Cochez cette case cat myfiles.txt
pour afficher le contenu du fichier à l'écran.
> / dev / null 2> & 1
La première partie > /dev/null
redirige la stdout
, sa curl
sortie vers /dev/null
(plus à ce sujet à l’avance) et 2>&1
redirige le stderr
vers le stdout
(qui a été redirigé vers /dev/null
afin que tout soit envoyé à /dev/null
).
Le côté gauche de 2>&1
vous indique ce qui va être redirigé et le côté droit vous indique où aller. Le &
est utilisé à droite pour distinguer stdout (1)
ou stderr (2)
des fichiers nommés 1
ou 2
. Donc, 2>1
créerait un nouveau fichier (s’il n’existait pas déjà) 1
et nommait le stderr
résultat.
/dev/null
est un fichier vide, un mécanisme utilisé pour supprimer tout ce qui y est écrit. Donc,
curl http://www.google.com > /dev/null
supprime efficacement curl
la sortie.
Mais pourquoi y a- t -il encore des éléments sur le terminal? Ce ne sont pascurl
des sorties régulières, mais des données envoyées à la stderr
, utilisées ici pour afficher des informations de progression et de diagnostic et pas seulement des erreurs .
curl http://www.google.com > /dev/null 2>&1
ignore les informations curl
de sortie et de curl
progression. Le résultat est que rien n'est affiché sur le terminal.
finalement
À &
la fin, vous indiquez au shell d'exécuter la commande en tant que tâche en arrière - plan . Cela provoque le retour immédiat de l' invite lorsque la commande est exécutée de manière asynchrone en coulisse. Pour voir les emplois en cours tapez jobs
dans votre terminal. Notez que cela diffère des processus en cours d'exécution sur votre système. Pour voir ces types top
dans le terminal.
Références