English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Entrée Shell/Redirection de sortie

La plupart des commandes des systèmes UNIX acceptent des entrées depuis votre terminal et renvoient les sorties générées vers votre terminal. Une commande lit généralement les entrées à partir d'un endroit appelé entrée standard, par défaut, cela est votre terminal. De même, une commande écrit généralement ses sorties dans la sortie standard, par défaut, c'est aussi votre terminal.

Liste des commandes de redirection :

Commande Description
command > file Rediriger la sortie vers file.
command < file Rediriger l'entrée vers file.
command >> file Rediriger la sortie en mode append vers file.
n > file Rediriger le fichier dont le descripteur est n vers file.
n >> file Rediriger le fichier dont le descripteur est n en mode append vers file.
n >& m Fusionner les fichiers de sortie m et n.
n <& m Fusionner les fichiers d'entrée m et n.
<< tag Prendre le contenu entre les balises de début tag et de fin tag comme entrée.

Il convient de noter que le descripteur de fichier 0 est généralement l'entrée standard (STDIN),1 C'est la sortie standard (STDOUT),2 C'est la sortie d'erreur standard (STDERR).

Redirection de sortie

La redirection est généralement réalisée en insérant des symboles spécifiques entre les commandes. En particulier, la syntaxe de ces symboles est indiquée comme suit :

commande1 > file1

Cette commande exécute le command1Puis stockez le contenu de la sortie dans un fichier1.

Attention à tout fichier1Le contenu existant à l'intérieur sera remplacé par le nouveau contenu. Si vous souhaitez ajouter de nouveaux contenus à la fin du fichier, utilisez l'opérateur >>.

Exemple en ligne

Exécutez la commande who suivante, qui redirige l'output complet de la commande dans le fichier utilisateur (users) :

$ who > users

Après exécution, il n'y a pas d'informations affichées dans le terminal, car la sortie a été redirigée vers le fichier spécifié à partir de l'équipement de sortie standard (terminal) par défaut.

Vous pouvez utiliser la commande cat pour afficher le contenu du fichier :

$ cat users
_mbsetupuser console  Oct 31 17:35 
tianqixin    console  Oct 31 17:35 
tianqixin    ttys000  Dec  1 11:33

La redirection de sortie remplace le contenu du fichier, voir l'exemple suivant :

$ echo "Base Tutorial Website : fr.oldtoolbag.com" > users
$ cat users
Base Tutorial Website : fr.oldtoolbag.com
$

Si vous ne souhaitez pas que le contenu du fichier soit remplacé, vous pouvez utiliser >> pour l'ajouter à la fin du fichier, par exemple :

$ echo "Base Tutorial Website : fr.oldtoolbag.com" >> users
$ cat users
Base Tutorial Website : fr.oldtoolbag.com
Base Tutorial Website : fr.oldtoolbag.com
$

Redirection d'entrée

Comme pour la redirection de sortie, les commandes Unix peuvent également obtenir des entrées à partir de fichiers, la syntaxe étant la suivante :

commande1 < file1

De cette manière, les commandes qui auraient dû être saisies à partir du clavier peuvent être transférées pour lire le contenu d'un fichier.

Attention : la redirection de sortie est indiquée par le signe >, et la redirection d'entrée par le signe <.

Exemple en ligne

Poursuivant l'exemple précédent, nous devons compter le nombre de lignes du fichier users, exécuter la commande suivante :

$ wc -l users
       2 users

Vous pouvez également rediriger l'entrée vers le fichier users :

$  wc -l < users
       2

Attention : les résultats des deux exemples ci-dessus sont différents : dans le premier exemple, le nom du fichier est affiché ; dans le second, cela ne le fait pas, car il ne sait que lire du contenu à partir de l'entrée standard.

commande1 < infile > outfile

Remplacez à la fois l'entrée et la sortie pour exécuter la commande1,lit le contenu du fichier infile, puis écrit la sortie dans outfile.

Explication approfondie de la redirection

En règle générale, chaque Unix/Les commandes Linux ouvrent toujours trois fichiers au moment de l'exécution :

  • Fichier d'entrée standard (stdin) : le descripteur de fichier de stdin est 0, les programmes Unix lisent des données par défaut à partir de stdin.

  • Fichier de sortie standard (stdout) : le descripteur de fichier de stdout est1,les programmes Unix exportent des données par défaut vers stdout.

  • Fichier de sortie d'erreur standard (stderr) : le descripteur de fichier de stderr est2,les programmes Unix écrivent des informations d'erreur dans le flux stderr.

Par défaut, commande > fichier redirige stdout vers le fichier, commande < fichier redirige stdin vers le fichier.

Si vous souhaitez rediriger stderr vers le fichier, vous pouvez écrire ainsi :

$ commande 2>fichier

Si vous souhaitez que stderr soit ajouté à la fin du fichier fichier, vous pouvez écrire ainsi :

$ commande 2>>fichier

2 représente le fichier de sortie d'erreur standard (stderr).

Si vous souhaitez rediriger stdout et stderr vers un fichier, vous pouvez écrire ainsi :

$ commande > fichier 2>&1
ou
$ commande >> fichier 2>&1

Si vous souhaitez rediriger stdin et stdout, vous pouvez écrire ainsi :

$ commande < fichier1 >fichier2

La commande 'commande' redirige stdin vers le fichier1,rediriger stdout vers le fichier2.

Here Document

Here Document est une redirection spéciale dans Shell, utilisée pour rediriger l'entrée vers un script ou un programme Shell interactif.

Sa forme de base est la suivante :

commande << delimiter
    document
delimiter

Son action est de transmettre le contenu (document) entre deux delimiters en tant qu'entrée pour la commande.

Attention :

  • Le delimiter à la fin doit être aligné à gauche, sans aucun caractère avant ou après, y compris les espaces et les tabulations.

  • Les espaces avant et après le delimiter sont ignorés.

Exemple en ligne

Par le biais de wc en ligne de commande -La commande l commande compte le nombre de lignes du Here Document :

$ wc -l << EOF
    Bienvenue sur
    Réseau de tutoriels de base
    fr.oldtoolbag.com
EOF
3          # Résultat de la sortie 3 ligne
$

Nous pouvons également utiliser Here Document dans des scripts, par exemple :

#!/bin/bash
# auteur:Réseau de tutoriels de base
# url:fr.oldtoolbag.com
cat << EOF
Bienvenue sur
Réseau de tutoriels de base
fr.oldtoolbag.com
EOF

Exécutez le script suivant, le résultat est :

Bienvenue sur
Réseau de tutoriels de base
fr.oldtoolbag.com

/dev/fichier null

Si vous souhaitez exécuter une commande mais ne souhaitez pas afficher le résultat de la sortie sur l'écran, vous pouvez rediriger la sortie vers /dev/null :

$ command > /dev/null

/dev/null est un fichier spécial, tout ce qui est écrit dans ce fichier sera rejeté ; si vous essayez de lire le contenu de ce fichier, vous ne recevrez rien. Mais /dev/Le fichier null est très utile, redirigez-y la sortie de la commande pour obtenir l'effet d'"interdire l'output".

Si vous souhaitez masquer stdout et stderr, vous pouvez écrire ainsi :

$ command > /dev/null 2>&1

Attention :0 est l'entrée standard (STDIN),1 C'est la sortie standard (STDOUT),2 C'est la sortie d'erreur standard (STDERR).

ici 2 et > Ne peut pas y avoir d'espaces entre2> Cela signifie que c'est une sortie d'erreur lorsque c'est intégré.