En résumé
Aller chercher http://www.google.com
en el arrière-plan et jetez les deux stdout
y stderr
.
curl http://www.google.com > /dev/null 2>&1 &
est la même chose que
curl http://www.google.com > /dev/null 2>/dev/null &
Principes de base
0
, 1
y 2
représentent le fichier standard descripteurs sur POSIX systèmes d'exploitation. Un descripteur de fichier est une référence du système à (essentiellement) un fichier ou un prise de courant .
La création d'un nouveau descripteur de fichier en C peut ressembler à quelque chose comme ceci :
fd = open("data.dat", O_RDONLY)
La plupart des commandes du système Unix prennent une entrée et affichent le résultat dans le terminal. curl
récupérera tout ce qui se trouve dans l'url spécifiée ( google point com ) et afficher le résultat à stdout
.
Redirection
Comme vous l'avez dit <
y >
sont utilisés pour rediriger la sortie d'une commande vers un autre endroit, comme un fichier.
Par exemple, dans ls > myfiles.txt
, ls
récupère le contenu du répertoire courant et >
redirige sa sortie vers myfiles.txt
(si le fichier n'existe pas, il est créé, sinon il est écrasé, mais vous pouvez utiliser la commande >>
au lieu de >
pour ajouter au fichier à la place). Si vous exécutez la commande ci-dessus, vous remarquerez que rien ne s'affiche dans le terminal. Cela signifie généralement un succès dans les systèmes Unix. Pour vérifier cela cat myfiles.txt
pour afficher le contenu du fichier à l'écran.
> /dev/null 2>&1
La première partie > /dev/null
redirige le stdout
c'est-à-dire curl
à la sortie de /dev/null
(plus d'informations à ce sujet prochainement) et 2>&1
redirige le stderr
à la stdout
(qui vient d'être redirigé vers /dev/null
donc tout sera envoyé à /dev/null
).
Le côté gauche de 2>&1
vous dit qué sera redirigé, et le côté droit vous indique où à. Le site &
est utilisé sur le côté droit pour distinguer stdout (1)
ou stderr (2)
à partir de fichiers nommés 1
ou 2
. Donc, 2>1
finira par créer un nouveau fichier (s'il n'existe pas déjà) nommé 1
et de jeter le stderr
résultat là-dedans.
/dev/null
est un fichier vide, un mécanisme utilisé pour rejeter tout ce qui y est écrit. Donc, curl http://www.google.com > /dev/null
supprime efficacement curl
La sortie de l'entreprise.
Mais pourquoi il y a encore des choses qui s'affichent sur le terminal . C'est no curl
mais les données envoyées à l'interface utilisateur de la stderr
utilisé ici pour afficher des informations de progression et de diagnostic et pas seulement erreurs .
curl http://www.google.com > /dev/null 2>&1
ignore les deux curl
et curl
de l'information sur les progrès réalisés. Le résultat est que rien n'est affiché sur le terminal.
Enfin
El &
à la fin est la façon dont vous dites au Shell d'exécuter la commande en tant que emploi en el arrière-plan . Cela entraîne le prompt pour revenir immédiatement alors que la commande est exécutée de manière asynchrone dans les coulisses. Pour voir les travaux en cours, tapez jobs
dans votre terminal. Notez que c'est différents des processus en cours dans votre système. Pour les voir, tapez top
dans le terminal.
Références