Difference between revisions of "HelloBash Ep2"

From Tmplab
(Direction les flux)
Line 2: Line 2:
 
'''contenu en cours de rédaction'''
 
'''contenu en cours de rédaction'''
  
== Direction les flux ==
+
= Un peu de théorie =
  
Shell = INPUT, OUTPUT
 
  
Shell = tty https://www.linusakesson.net/programming/tty/
 
  
Gestion des flux ( aka. stream )
+
''' Le shell que vous utilisez est probablement un stty'''
 +
[[File:Teletype.jpeg|200px|thumb|right| Un teletype]]
  
https://xavcc.frama.io/introduction-stream/
+
  '''$ tty'''
 +
  /dev/pts/0
 +
  '''$ whatis pts'''
 +
  pts (4)              - pseudoterminal master and slave
 +
  '''$ stty'''
 +
  speed 38400 baud; line = 0;
 +
  -brkint -imaxbel
 +
 
 +
 
 +
Un pts/stty est une simulation de tty, qui signifie teletype, un descendant du télégraphe, qui communiquait par modem et ligne télégraphique avec d'autres teletypes.
 +
[https://www.linusakesson.net/programming/tty/ Ici une analyse poussée, de ce qu'est un tty et les teletype].
 +
 
 +
'''Un tty est un programme dont la fonctionnalité première est de gèrer du flux de texte. '''
 +
 
 +
Voilà ce que fait -un peu caricaturalement- un terminal comme à l'époque du teletype :
 +
 
 +
# Recevoir un text (input/stdin) saisi : création d'une chaîne de caractères individuels
 +
# Analyser le texte saisi  (parsing) : découpe de la chaîne de texte en commande + arguments
 +
# Exécuter la commande avec ses arguments (exec[vlpe]) et retransmission des chaînes de sortie standard (output/stdout) et d'erreurs (errors/stderr)
 +
 
 +
 
 +
'''Ce qu'on appelle flux (ou streams) ce sont les différentes chaînes de caractères en transit : les stdin, stdout, stderr'''
 +
 +
Bash permet de manipuler ces flux. Force du shell : combiner des commandes existantes entre elles, via les flux.
 +
 
 +
Métaphore: un teletype qui enverrait un message en Italie, récupèrerait la sortie, remplacerait certains mots et retransmettrait le résultat en Allemagne.
 +
 
 +
Dans le cas d'un stty, pas besoin d'édition papier, tout se fait avec des chaînes de texte.
 +
 
 +
'''Les types de manipulation'''
 +
 
 +
Nous allons voir les manipulations de flux suivantes
 +
 
 +
# les redirections
 +
# les pipes (pipelines/tubes) 
 +
 
 +
 
 +
Dans les deux cas nous verrons des commandes utiles associées à ces manipulations
 +
 
 +
 
 +
 
 +
= Les redirections de flux =
 +
 
 +
== stdin, stdout, stderr ==
 +
 
 +
 
 +
'''Un terminal est instancié avec 3 flux natifs numérotés 0, 1, et 2'''
 +
 
 +
  '''$ ls -go /proc/self/fd'''
 +
  total 0
 +
  lrwx------ 1 <...> 0 -> /dev/pts/4
 +
  lrwx------ 1 <...> 1 -> /dev/pts/4
 +
  lrwx------ 1 <...> 2 -> /dev/pts/4
 +
  lr-x------ 1 <...> 3 -> /proc/6017/fd
 +
  '''$ ls -go /dev/stdin'''
 +
  lrwxrwxrwx 1 <...> /dev/stdin -> /proc/self/fd/0
 +
 
 +
Ce sont des descripteurs de fichiers (file descriptors/fd) et ils peuvent être manipulés en les substituant avec d'autres descripteurs de fichiers.
 +
 
 +
Ils ont chacun un numéro standardisé :
 +
 
 +
* 0 == stdin
 +
* 1 == stdout
 +
* 2 == stderr
 +
 
 +
 
 +
'''La redirection permet aux descripteurs de fichier des commandes d'être dupliqués, ouverts, fermés, de se référer à différents fichiers et de modifier les fichiers lus et écrits par la commande.'''
 +
 
 +
Les opérateurs de redirection peuvent précéder ou apparaître n'importe où dans une commande simple ou peuvent suivre une commande. Les redirections sont traitées dans l'ordre dans lequel elles apparaissent, de gauche à droite.
 +
 
 +
Les deux opération suivantes auront des résultats différents
 +
 
 +
  $ commande redirection_1 redirection_2
 +
  $ commande redirection_2 redirection_1
 +
 
 +
== Redirections de stdin ==
 +
=== Redirection par un descripteur de fichier : < ===
 +
  $ cat < /etc/hosts
 +
  $ mysql < ~/query.sql
 +
 
 +
=== Redirection par un document (HEREWORD) : << ===
 +
 
 +
  $ cat << HEREDOC
 +
  hello Bash
 +
  HEREDOC
 +
 
 +
===  Redirection par une chaîne (HEREDOC) : <<< ===
 +
  $ cat <<< "Hello Bash"
  
=== Les Pipes ===
+
> et >>
 +
>| et >>|
 +
<
 +
<<
 +
<<<
 +
<(...)
 +
[n]<
 +
[n]<>
 +
= Les Pipes =
  
=== Les redirections de flux ===
+
= Sources =
Les différentes options  >(>) <(<) <(...)
+
https://xavcc.frama.io/introduction-stream/
 +
https://developer.ibm.com/tutorials/l-lpic1-103-2/
 +
https://developer.ibm.com/tutorials/l-lpic1-103-4/
 +
https://www.gnu.org/software/bash/manual/html_node/Redirections.html

Revision as of 19:43, 13 October 2019

contenu en cours de rédaction

Un peu de théorie

Le shell que vous utilisez est probablement un stty

Un teletype
 $ tty
 /dev/pts/0
 $ whatis pts
 pts (4)              - pseudoterminal master and slave
 $ stty
 speed 38400 baud; line = 0;
 -brkint -imaxbel


Un pts/stty est une simulation de tty, qui signifie teletype, un descendant du télégraphe, qui communiquait par modem et ligne télégraphique avec d'autres teletypes. Ici une analyse poussée, de ce qu'est un tty et les teletype.

Un tty est un programme dont la fonctionnalité première est de gèrer du flux de texte.

Voilà ce que fait -un peu caricaturalement- un terminal comme à l'époque du teletype :

  1. Recevoir un text (input/stdin) saisi : création d'une chaîne de caractères individuels
  2. Analyser le texte saisi (parsing) : découpe de la chaîne de texte en commande + arguments
  3. Exécuter la commande avec ses arguments (exec[vlpe]) et retransmission des chaînes de sortie standard (output/stdout) et d'erreurs (errors/stderr)


Ce qu'on appelle flux (ou streams) ce sont les différentes chaînes de caractères en transit : les stdin, stdout, stderr

Bash permet de manipuler ces flux. Force du shell : combiner des commandes existantes entre elles, via les flux.

Métaphore: un teletype qui enverrait un message en Italie, récupèrerait la sortie, remplacerait certains mots et retransmettrait le résultat en Allemagne.

Dans le cas d'un stty, pas besoin d'édition papier, tout se fait avec des chaînes de texte.

Les types de manipulation

Nous allons voir les manipulations de flux suivantes

  1. les redirections
  2. les pipes (pipelines/tubes)


Dans les deux cas nous verrons des commandes utiles associées à ces manipulations


Les redirections de flux

stdin, stdout, stderr

Un terminal est instancié avec 3 flux natifs numérotés 0, 1, et 2

 $ ls -go /proc/self/fd
 total 0
 lrwx------ 1 <...> 0 -> /dev/pts/4
 lrwx------ 1 <...> 1 -> /dev/pts/4
 lrwx------ 1 <...> 2 -> /dev/pts/4
 lr-x------ 1 <...> 3 -> /proc/6017/fd
 $ ls -go /dev/stdin
 lrwxrwxrwx 1 <...> /dev/stdin -> /proc/self/fd/0

Ce sont des descripteurs de fichiers (file descriptors/fd) et ils peuvent être manipulés en les substituant avec d'autres descripteurs de fichiers.

Ils ont chacun un numéro standardisé :

  • 0 == stdin
  • 1 == stdout
  • 2 == stderr


La redirection permet aux descripteurs de fichier des commandes d'être dupliqués, ouverts, fermés, de se référer à différents fichiers et de modifier les fichiers lus et écrits par la commande.

Les opérateurs de redirection peuvent précéder ou apparaître n'importe où dans une commande simple ou peuvent suivre une commande. Les redirections sont traitées dans l'ordre dans lequel elles apparaissent, de gauche à droite.

Les deux opération suivantes auront des résultats différents

 $ commande redirection_1 redirection_2
 $ commande redirection_2 redirection_1

Redirections de stdin

Redirection par un descripteur de fichier : <

 $ cat < /etc/hosts
 $ mysql < ~/query.sql

Redirection par un document (HEREWORD) : <<

 $ cat << HEREDOC
 hello Bash
 HEREDOC

Redirection par une chaîne (HEREDOC) : <<<

 $ cat <<< "Hello Bash"

> et >> >| et >>| < << <<< <(...) [n]< [n]<>

Les Pipes

Sources

https://xavcc.frama.io/introduction-stream/ https://developer.ibm.com/tutorials/l-lpic1-103-2/ https://developer.ibm.com/tutorials/l-lpic1-103-4/ https://www.gnu.org/software/bash/manual/html_node/Redirections.html