Redirections avancées
Rediriger les descripteurs 1 et 2 vers le même fichier :
$ commande 1> fichier1 2>&1
ou
$ commande 2> fichier2 1>&2
Le principe consiste à écrire dans un fichier le résulat du descripteur 1 dans le fichier "fichier1" (1> fichier1) puis le résultat du descripteur 2 vers le descripteur 1 (2>&1) et par conséquent dans le fichier "fichier1".
$ find /etc -name smb.conf 1> resultat 2>&1
$ cat resultat
find: "/etc/lvm/cache": Permission non accordée
find: "/etc/lvm/backup": Permission non accordée
find: "/etc/lvm/archive": Permission non accordée
/etc/samba/smb.conf
Attention :
$ commande 2>&1 1> fichier1
Cette syntaxe n'agit pas de la même manière que les précédentes.
En effet, nous indiquons dans un premier temps de rediriger le descripteur 2 (sortie d'erreur standard) vers le descripteur 1, c'est à dire vers la sortie standard qui est, par défaut, l'affichage à l'écran, puis dans un second temps nous redirigeons le descripteur 1 (sortie standard) vers le fichier "fichier1".
En conclusion, tous les messages d'erreurs seront affichés à l'écran et le résulat de la commande dans le fichier "fichier1".
Cela revient à saisir :
$ commande 1> fichier1
La double redirection en lecture :
Elle est principalement utilisée dans les scripts shell.
Elle permet de connecter l'entrée standard d'une commande sur une portion du script
Par exemple, avec la commande mail, cela permet de terminer la saisie du texte avec un caractère ou une chaine de caractère.
$ mail toto<<end
> bonjour
> ceci est un test
> end
$
Pour mettre fin à la commande mail, il suffit simplement de saisir l'expression inscrite juste après les doubles chevrons "<<". Dans l'exemple, la commande se termine après avoir saisi "end".
Identique à la fonction ^d (CTRL+d) en console.
Utilisation dans un script :
$ cat envoiMail.sh
#!/bin/sh
mail toto<<end
Bonjour,
Ceci est un test
Voici la liste des fichiers presents dans ton repertoire :
`ls -lhtr`
end
exit 0
Exécution du script
$ sh ./envoiMail.sh
Fermeture d'un descripteur :
Il est tout à fait possible de fermé un descripteur d'entrée ou de sortie en utilisant les symboles "<&-" ou ">&-" ou "2>&-".
Descripteur d'entrée standard "0" :
$ commande <&-
Descripteur de sortie standard "1" :
$ commande >&-
Descripteur de sortie d'erreur standard "2" :
$ commande 2>&-
Ajouter un commentaire