Entrées / sorties de commande

Mise à jour : Debian 10.10

Sommaire

1 - Principe

1.1 - Entrées - sorties standards

$ tr '[a-z]' '(A-Z]'
une ligne
UNE LIGNE
une autre ligne
UNE AUTRE LIGNE
$ head -n1 /etc/apt/sources.list
# buster

$ head -p1 /etc/apt/sources.list
head : option invalide -- 'p'

2.2 - Redirection de sortie

$ head -n1 /etc/apt/sources.list >test

$ cat test
buster
$ head -n1 /etc/apt/crypttab >>test

$ cat test
buster
# <target name> <source device> <key file> <options>

2.3 - Redirection d'entrée

$ echo -e "une ligne\nune autre ligne" >test
$ cat test
une ligne
une autre ligne

$ tr '[a-z]' '(A-Z]' <test
UNE LIGNE
UNE AUTRE LIGNE
$ tr '[a-z]' '(A-Z]' <<EOF
> une ligne
> une autre ligne
> EOF
UNE LIGNE
UNE AUTRE LIGNE

Tout se passe comme si l'entrée de la commande avait été alimentée par un fichier contenant le texte saisi au clavier entre les deux délimiteurs

2 - Redirection en sortie

2.1 - Syntaxe

stdout                       1
stderr 2
stdout et stderr &
> avec réouverture
>> sans réouverture (dans le cas d'un fichier pour préserver le contenu du fichier)
stdout                 &1
stderr &2
un fichier           nom_fichier
le fichier nul /dev/null
$ COMMANDE >Fichier_sortie        # Équivalent à 1>Fichier_sortie
$ COMMANDE 2>/dev/null
$ COMMANDE >Fichier_sortie 2>/dev/null
$ COMMANDE >Fichier_sortie 2>/dev/null # est équivalent à 

$ 2>/dev/null COMMANDE >Fichier_sortie

2.2 - Exemples d'utilisation

$ head -1 /etc/apte/sources.list
head: impossible d'ouvrir '/etc/apte/sources.list' en lecture: Aucun fichier ou dossier de ce type

$ head -1 /etc/apte/sources.list 2>erreur

$ cat erreur
head: impossible d'ouvrir '/etc/apte/sources.list' en lecture: Aucun fichier ou dossier de ce type
$ head -1 /etc/apte/sources.list &>cumul
$ head -1 /etc/apt/sources.list &>>cumul

$ cat cumul
head: impossible d'ouvrir '/etc/apte/sources.list' en lecture: Aucun fichier ou dossier de ce type
# buster
$ cat 
cat recopie l'entrée standard sur la sortie standard
cat recopie l'entrée standard sur la sortie standard
$ cat >test
cat recopie l'entrée standard sur la sortie standard la sortie standard peut-être redirigée vers un fichier

$ cat test
cat recopie l'entrée standard sur la sortie standard la sortie standard peut-être redirigée vers un fichier
$ tr a-z A-Z >test
un exemple de fichier
de deux lignes

$ cat test
UN EXEMPLE DE FICHIER
DE DEUX LIGNES

3 - Redirection en entrée

3.1 - Syntaxe

$ COMMANDE <Fichier_entrée
$ COMMANDE <<EOF
>
>la saisie clavier est comprise entre les deux délimiteurs de nom EOF
>
EOF

3.2 - Exemples d'utilisation - Redirection entrée depuis un fichier

$ cat <test
une ligne
une autre ligne
$ tr a-z A-Z <test
UNE LIGNE
UNE AUTRE LIGNE

3.2 - Exemples d'utilisation - Redirection entrée depuis clavier

$ tr '[a-z]' '(A-Z]' <<EOF
> une ligne
> une autre ligne
> EOF
UNE LIGNE
UNE AUTRE LIGNE
$ tail -1 <<EOF
> première ligne
> deuxième ligne
> dernière ligne
> EOF
dernière ligne
$ wc -c <<EOF
> 12345678
> EOF
9
$ hexdump -C <<EOF
> ceci est une ligne de texte
> cela en est une autre
> EOF
00000000 63 65 63 69 20 65 73 74 20 75 6e 65 20 6c 69 67 |ceci est une lig|
00000010 6e 65 20 64 65 20 74 65 78 74 65 0a 63 65 6c 61 |ne de texte.cela|
00000020 20 65 6e 20 65 73 74 20 75 6e 65 20 61 75 74 72 | en est une autr|
00000030 65 0a |e.|
00000032
$ sed 's/a/A/g' <<EOF
> azeruiopqdfazeruiopqgaezrazerazeqfaezraez
> EOF
AzeruiopqdfAzeruiopqgAezrAzerAzeqfAezrAez

3.5 - Commandes avec entrée standard et entrée fichier

$ head -c5 test                      # Utilisation de l'entrée fichier
qsdfq

$ head -c5 <test # Utilisation de l'entrée standard
qsdfq
$ shasum test                                        # Entrée fichier        
04b5501ab4abdd77367f2a2300349eb74ec271e5 test

$ shasum <test # Entrée standard
04b5501ab4abdd77367f2a2300349eb74ec271e5 -

3.6 - Commande echo

La commande echo affiche une chaîne de caractère "transmise en paramètre", mais ne la lit pas sur l'entrée standard. La sortie de la commande echo en cas d'utilisation avec l'entrée standard, sera toujours une ligne vide

$ echo </etc/apt/sources.list

$ echo <<EOF
echo ne lit pas l'entrée standard
EOF

$

4 - Combinaison des redirections d'entrée et de sortie

4.1 - Avec redirection d'entrée simple

<fichier_entrée COMMANDE >fichier_sortie
$ </etc/apt/sources.list wc -l >lignes
$ cat lignes
26

A noter que l'ordre d'écriture des redirections est indifférent. La commande ci-dessus est équivalente à

$ wc -l </etc/apt/sources.list >lignes 
$ wc -l </etc/apt/sources.list >>lignes 

4.2 - Avec redirection d'entrée double "Here document"

$ tr '[a-z]' '(A-Z]' <<EOF >test
> une ligne
> une autre ligne
> EOF

$ cat test
UNE LIGNE
UNE AUTRE LIGNE
$ <<EOF tr '[a-z]' '(A-Z]' >test
> ....
tr '[a-z]' '(A-Z]' <<EOF >>test