Redirection d'entrée/sortie du shell
La plupart des commandes du système UNIX acceptent les entrées de votre terminal et renvoient la sortie résultante à votre terminal. Une commande lit généralement l'entrée à partir d'un endroit appelé entrée standard, qui se trouve être votre terminal par défaut. De même, une commande écrit généralement sa sortie sur la sortie standard, qui est également votre terminal par défaut.
La liste des commandes de redirection est la suivante :
命令 | 说明 |
---|---|
command > file | 将输出重定向到 file。 |
command < file | 将输入重定向到 file。 |
command >> file | 将输出以追加的方式重定向到 file。 |
n > file | 将文件描述符为 n 的文件重定向到 file。 |
n >> file | 将文件描述符为 n 的文件以追加的方式重定向到 file。 |
n >& m | 将输出文件 m 和 n 合并。 |
n <& m | 将输入文件 m 和 n 合并。 |
<< tag | 将开始标记 tag 和结束标记 tag 之间的内容作为输入。 |
Il convient de noter que le descripteur de fichier 0 est généralement une entrée standard (STDIN), 1 est une sortie standard (STDOUT) et 2 est une 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 la suivante :
command1 > file1
La commande ci-dessus exécute la commande1 et enregistre la sortie dans le fichier1.
Notez que tout contenu existant dans le fichier1 sera remplacé par le nouveau contenu. Si vous souhaitez ajouter du nouveau contenu à la fin du fichier, utilisez l'opérateur >>
Instance
Exécutez la commande who suivante, qui redirigera la sortie complète de la commande dans le fichier utilisateur (users) :
$ who > users
Après exécution, il n'y a pas de terminal Informations de sortie car la sortie a été redirigée du périphérique de sortie standard par défaut (terminal) vers le fichier spécifié.
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 écrasera le contenu du fichier, veuillez consulter l'exemple suivant :
$ echo "php中文网:www.php.cn" > users $ cat users php中文网:www.php.cn $
Si vous ne le faites pas souhaitez que le contenu du fichier soit écrasé, vous pouvez utiliser >> pour ajouter à la fin du fichier, par exemple :
$ echo "php中文网:www.php.cn" >> users $ cat users php中文网:www.php.cn php中文网:www.php.cn $
Redirection d'entrée
Comme la redirection de sortie, Unix les commandes peuvent également obtenir des entrées à partir de fichiers, la syntaxe est :
command1 < file1
De cette façon, les commandes qui nécessitent à l'origine une entrée du clavier seront transférées pour lire le contenu du fichier.
Remarque : la redirection de sortie est supérieure au signe (>), la redirection d'entrée est inférieure au signe (<).
Exemple
En suivant l'exemple ci-dessus, nous devons compter le nombre de lignes dans le fichier utilisateurs, exécutez la commande suivante :
$ wc -l users 2 users
Vous pouvez également rediriger l'entrée vers le fichier des utilisateurs :
$ wc -l < users 2
Remarque : Les résultats des deux exemples ci-dessus sont différents : le premier exemple affichera le nom du fichier ; le second ne le fera pas, car il ne sait lire que le contenu de l'entrée standard.
command1 < infile > outfile
Remplacez l'entrée et la sortie en même temps, exécutez la commande 1, lisez le contenu du fichier infile, puis écrivez la sortie dans outfile.
Explication détaillée de la redirection
Généralement, trois fichiers seront ouverts lors de l'exécution de chaque commande Unix/Linux :
Fichier d'entrée standard (stdin) : le descripteur de fichier de stdin est 0 et les programmes Unix lisent les données de stdin par défaut.
Fichier de sortie standard (stdout) : le descripteur de fichier de stdout est 1. Les programmes Unix génèrent des données sur stdout par défaut.
Fichier d'erreur standard (stderr) : le descripteur de fichier de stderr est 2 et les programmes Unix écriront les informations d'erreur dans le flux stderr.
Par défaut, la commande > file redirige stdout vers le fichier et la commande <
Si vous souhaitez que stderr soit redirigé vers le fichier, vous pouvez écrire comme ceci :
$ command 2 > file
Si vous souhaitez que stderr soit ajouté à la fin du fichier, vous pouvez écrire comme ceci :
$ command 2 >> file
2 représente le fichier d'erreur standard (stderr).
Si vous souhaitez fusionner stdout et stderr et les rediriger vers un fichier, vous pouvez écrire comme ceci :
$ command > file 2>&1 或者 $ command >> file 2>&1
Si vous souhaitez rediriger à la fois stdin et stdout, vous pouvez écrire comme ceci :
$ command < file1 >file2<🎜 La commande >command redirige stdin vers file1 et stdout vers file2.
Here Document
Here Document est une méthode de redirection spéciale dans Shell, utilisée pour rediriger les entrées vers un script ou un programme Shell interactif.
Sa forme de base est la suivante :
command << delimiter document delimiter
Sa fonction est de passer le contenu (document) entre les deux délimiteurs en entrée de la commande.
Remarque :
Le délimiteur à la fin doit être écrit au format supérieur. Il ne peut y avoir aucun caractère devant lui, ni aucun caractère à l'arrière, y compris les espaces et les retraits de tabulation.
Les espaces avant et après le délimiteur initial seront ignorés.
Exemple
Calculez le nombre de lignes de Here Document via la commande wc -l sur la ligne de commande :
$ wc -l << EOF 欢迎来到 php中文网 www.php.cn EOF 3 # 输出结果为 3 行 $
Nous pouvons utilisez également Ici, le document est utilisé dans les scripts, par exemple :
#!/bin/bash # author:php中文网 # url:www.php.cn cat << EOF 欢迎来到 php中文网 www.php.cn EOF
Exécutez le script ci-dessus et le résultat de sortie sera :
欢迎来到 php中文网 www.php.cn
/dev/null File
Si vous souhaitez exécuter une certaine commande, mais que vous ne souhaitez pas afficher les résultats de sortie à l'écran, vous pouvez rediriger la sortie vers /dev/null :
$ command > /dev/null
/dev/null est un fichier spécial et le contenu qui y est écrit sera supprimé ; si vous essayez de lire à partir de ce fichier, rien ne sera lu. Cependant, le fichier /dev/null est très utile. Rediriger la sortie de la commande vers celui-ci aura pour effet de "désactiver la sortie".
Si vous souhaitez bloquer stdout et stderr, vous pouvez écrire comme ceci :
$ command > /dev/null 2>&1
Remarque : 0 est une entrée standard (STDIN), 1 est standard sortie (STDOUT), 2 est la sortie d'erreur standard (STDERR).