cours-unix-shell / src / bases /
..
README.md Ajout de <<EOF dans bases/README 1 year ago
commandes-basiques.md Less is more 1 year ago
fichiers.md feat(bases): Ajout de fichiers.md 1 year ago
pipe.gif Ajout des images manquantes 1 year ago
tp.md Less is more 1 year ago
unixInputFile.gif Ajout des images manquantes 1 year ago
unixRdir.gif Ajout des images manquantes 1 year ago
README.md

Redirections et Pipes

Redirections

Accès en lecture par redirection de l'entrée

entrée et sortie standard d'une commande Unix

Entrées sorties standard

Toute commande Unix peut utiliser :

  • l'entrée standard (stdin)
  • la sortie standard (stdout)

Valeurs implicites (pour un poste de travail) :

  • stdin : le clavier
  • stdout : l'écran

Redirection de l'entrée standard vers un fichier

redirection de l'entrée standard d'une commande unix

Soit :

  • aUnixCommand = un programme Unix de type filtre
  • myFile = un fichier

La commande shell suivante : aUnixCommand < myFile

appliquera le programme aUnixCommand au fichier myFile et affichera le résultat sur l'écran.

Redirections et quelques commandes Unix

cat

Utilisée sans paramètres, recopie le fichier en entrée sur la sortie standard :

cat < Formation/TP1/exo.txt

recopie sur l'écran le fichier Formation/TP1/exo.txt.

cat - avec paramètres

La commande cat peut s'utiliser avec une liste de fichiers en paramètres.
Ainsi :

cat Formation/TP1/exo1.txt Formation/TP1/exo2.txt

"concatène" les fichiers sur stdout.

📗 À NOTER : avec un seul fichier les commandes :

cat Formation/TP1/exo.txt

et

cat < Formation/TP1/exo.txt

peuvent être considérées comme équivalentes.

sort

Trie les lignes d'un fichier dans l'ordre lexicographique ASCII.

Exemple :

sort < Formation/TP1/table.txt

grep

Sélectionne les lignes qui contiennent une expression donnée en paramètre.
Syntaxe simplifiée :

grep expression < file

Exemple :

grep 152X < Formation/TP1/issn.txt

Syntaxe simplifiée :

head [ -number ] < file
  • sans paramètre, sélectionne les 10 premières lignes
  • avec paramètre, sélectionne le nombre de lignes désignées par le paramètre

Exemple :

head -5 < Formation/TP1/file.xml

Redirection de la sortie standard vers un fichier

La sortie standard peut à son tour être redirigée vers un fichier.
2 possibilités :

commande > fichier

le résultat de la commande va servir à créer ou à remplacer (par écrasement) le contenu du fichier donné.

commande >> fichier

le résultat de la commande va servir à créer (la première fois) ou à rallonger le contenu du fichier donné (concaténation).

Combinaison simple des redirections

Entrée et sortie standard peuvent être rédirigées simultanément.
Ainsi :

cat < fA > fB

copie le contenu du fichier fA pour créer le fichier fB.

Combinaison de fitres en cascade - le pipe

pipe de deux commandes unix

Le mécanisme appelé pipe permet d'enchaîner des commandes en affectant la sortie de l'une à l'entrée de la suivante. Sa forme générale est :

c0 < fA | c1 | c2 | ... | cn > fB

Le fichier fA est lu et traité par la commande c0, le résultat est alors traité par c1, et ainsi de suite jusqu'à la commande cn pour laquelle le résultat est écrit dans le fichier fB.

Remplissage de l'entrée standard

Une manière d'envoyer des données vers l'entrée standard d'une commande sans avoir à les mettre dans un fichier, et d'utiliser la construction <<EOF.
Cette syntaxe permet de déclarer un marqueur de fin de fichier, EOF (pour End Of File) qu'on réutilise seul sur une ligne pour signifier que les données qu'on veut envoyer sont terminées.

$ cat <<EOF | wc
Bonjour tout le monde.
Je mets deux lignes en entrée standard
EOF
      2      11      67

En général, les lignes jusqu'au marqueur de fin de fichier sont signalées par un caractère (par exemple >, mais ça dépend de votre configuration).

💡 La forme du marqueur est une convention, mais si vous avez besoin de mettre dans l'entrée standard une ligne ne contenant que EOF, vous pouvez opter pour un autre marqueur, disons fin_entree_standard:

$ cat <<fin_entree_standard | wc
EOF
Ne fermera pas le fichier en entrée standard.
Mais la ligne suivante oui.
fin_entree_standard
      3      13      78