logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 19-04-2020 16:40:26

Cauryl
Invité

Redirection de flux

Salut !

Une excellente réponse (en anglais) sur askubuntu.com qui pourrait servir de base pour une nouvelle page dans le wiki.
https://askubuntu.com/questions/420981/ … 237#731237

Comment écrire la sortie d'une commande dans un fichier :

          || visible in terminal ||   visible in file   || existing
  Syntax  ||  StdOut  |  StdErr  ||  StdOut  |  StdErr  ||   file  
==========++==========+==========++==========+==========++===========
    >     ||    no    |   yes    ||   yes    |    no    || overwrite
    >>    ||    no    |   yes    ||   yes    |    no    ||  append
          ||          |          ||          |          ||
   2>     ||   yes    |    no    ||    no    |   yes    || overwrite
   2>>    ||   yes    |    no    ||    no    |   yes    ||  append
          ||          |          ||          |          ||
   &>     ||    no    |    no    ||   yes    |   yes    || overwrite
   &>>    ||    no    |    no    ||   yes    |   yes    ||  append
          ||          |          ||          |          ||
 | tee    ||   yes    |   yes    ||   yes    |    no    || overwrite
 | tee -a ||   yes    |   yes    ||   yes    |    no    ||  append
          ||          |          ||          |          ||
 n.e. (*) ||   yes    |   yes    ||    no    |   yes    || overwrite
 n.e. (*) ||   yes    |   yes    ||    no    |   yes    ||  append
          ||          |          ||          |          ||
|& tee    ||   yes    |   yes    ||   yes    |   yes    || overwrite
|& tee -a ||   yes    |   yes    ||   yes    |   yes    ||  append



List:

    command > output.txt

    The standard output stream will be redirected to the file only, it will not be visible in the terminal. If the file already exists, it gets overwritten.

    command >> output.txt

    The standard output stream will be redirected to the file only, it will not be visible in the terminal. If the file already exists, the new data will get appended to the end of the file.

    command 2> output.txt

    The standard error stream will be redirected to the file only, it will not be visible in the terminal. If the file already exists, it gets overwritten.

    command 2>> output.txt

    The standard error stream will be redirected to the file only, it will not be visible in the terminal. If the file already exists, the new data will get appended to the end of the file.

    command &> output.txt

    Both the standard output and standard error stream will be redirected to the file only, nothing will be visible in the terminal. If the file already exists, it gets overwritten.

    command &>> output.txt

    Both the standard output and standard error stream will be redirected to the file only, nothing will be visible in the terminal. If the file already exists, the new data will get appended to the end of the file..

    command | tee output.txt

    The standard output stream will be copied to the file, it will still be visible in the terminal. If the file already exists, it gets overwritten.

    command | tee -a output.txt

    The standard output stream will be copied to the file, it will still be visible in the terminal. If the file already exists, the new data will get appended to the end of the file.

    (*)

    Bash has no shorthand syntax that allows piping only StdErr to a second command, which would be needed here in combination with tee again to complete the table. If you really need something like that, please look at "How to pipe stderr, and not stdout?" on Stack Overflow for some ways how this can be done e.g. by swapping streams or using process substitution.

    command |& tee output.txt

    Both the standard output and standard error streams will be copied to the file while still being visible in the terminal. If the file already exists, it gets overwritten.

    command |& tee -a output.txt

    Both the standard output and standard error streams will be copied to the file while still being visible in the terminal. If the file already exists, the new data will get appended to the end of the file.



Par contre, il n'est pas précisé ce qui est un bashisme et ce qui est posix.

#2 19-04-2020 17:43:58

MicP
Membre
Inscription : 29-02-2016

Re : Redirection de flux

Bonjour

ls ~/.bashrc fichierInexistant 1>/dev/null 2>fichierSTDERR.txt

N'affiche rien à l'écran mais fichierSTDERR.txt contiendra uniquement ce que le flux stderr a retourné :

cat fichierSTDERR.txt

ls: impossible d'accéder à 'fichierInexistant': Aucun fichier ou dossier de ce type



=======

ls ~/.bashrc fichierInexistant 2>&1 | egrep "fichierInexistant|bashrc"

ls: impossible d'accéder à 'fichierInexistant': Aucun fichier ou dossier de ce type
/home/michel/.bashrc

les sorties stderr et stdout sont toutes les deux passées par le pipe.

=======

ls ~/.bashrc fichierInexistant 2>&1 1>/dev/null  | egrep "fichierInexistant|bashrc"

ls: impossible d'accéder à 'fichierInexistant': Aucun fichier ou dossier de ce type

Seul stderr est passé par le pipe, stdout est allé vers /dev/null.

=======

… Par contre, il n'est pas précisé ce qui est un bashisme et ce qui est posix. …

Toutes ces redirections sont bien POSIX

Dernière modification par MicP (19-04-2020 18:25:17)

Hors ligne

#3 19-04-2020 18:36:52

Cauryl
Invité

Re : Redirection de flux

Jusqu'à présent, jamais je n'ai eu la nécessité d'utiliser des redirections plus complexes que stdout et stderr dans /dev/null (>/dev/null 2>&1). Merci pour ces précisions. big_smile

#4 19-04-2020 20:49:42

MicP
Membre
Inscription : 29-02-2016

Re : Redirection de flux

Un lien vers une page tuto concernant les redirections : wiki-dev.bash-hackers.org -> redirection tutorial

Un autre lien concernant les redirections, mais en français
IUT Rodez - Eric Sanchis : Introduction à la programmation en Bash -> Chapitre 5. Redirections élémentaires

Le même, mais dont j'ai refait la page CSS pour que ce soit plus reposant pour mes beaux yeux :
IUT Rodez - Eric Sanchis : Introduction à la programmation en Bash -> Chapitre 5. Redirections élémentaires

=======
Référence Debian -> Didacticiels GNU/Linux -> 1.5.8. Séquences de commandes typiques et redirection de l’interpréteur de commandes

Dernière modification par MicP (21-04-2020 08:14:12)

Hors ligne

Pied de page des forums