Chaque commande est associée à
- Une entrée standard (stdin)
- Une sortie standard (stdout)
- Une sortie d'erreur (stderr)
Éventuellement, des descripteurs de fichier supplémentaires peuvent être associés à une commande.
Gestion de flux
Il existe trois flux majeurs :
- l'entrée (ou « input ») standard (entrée 0) ;
- la sortie (ou « output ») standard (entrée 1) ;
- la sortie d'erreur standard (entrée 2)
Méthode d'utilisation :
| Commandes | Opérations | Explications |
|---|
| A > fichier | sortie (>) | Exécute la commande A et écrit les résultats dans fichier |
| A 2> fichier | sortie (2>) | Exécute la commande A et écrit les erreurs dans fichier |
| A > fichier 2>&1 | sortie (> et 2>&1) | Exécute la commande A et écrit les résultats et les erreurs dans fichier |
| A < fichier | entrée (<) | Exécute la commande A et propose le fichier comme des entrées de A. |
| A | B | sortie, entrée(|) | Exécute A et envoie ses résultats comme entrée de B |
Redirection de l'entrée et des 2 sorties
- on utilise > pour faire la redirection de la sortie standard (stdout) d'une commande
- 2> pour la redirection de la sortie 'des erreurs' (stderr)
d'une manière générale n> permet la redirection du n descripteur de fichier
- &> pour rediriger en même temps la sortie standard et la sortie erreur :
Variables du shell
Les variables sont référencées en les faisant précéder par le signe $ : exemple echo $HOME
Quelques variables d'environnement : USER PID HOME PATH SHELL
Substitution de commandes
dans une ligne de commande, on remplace comme argument une commande par son résultat (au stdout) en l'entourant d'apostrophes inversées ` nom commande` ou encore en utilisant $() $(nom commande)
Caractère d'échappement anti-slash ("\")
Anti-slash en fin de ligne
À la fin d'une ligne, un anti-slash indique que la commande continue à la ligne suivante. Cette fonction est particulièrement utile pour les grandes commandes afin de les rendre plus facilement lisibles.
Anti-slash pour former un des caractères spéciaux du C
Les chaînes ayant un format analogue à $'\n' sont interprétées d'une façon particulière par le bash. Elles sont transformées en conformité avec les règles du C ANSI. Exemple :
echo $'\a' # Provoquera un bip sonore.
Voici la liste :
Échappement
par antislash | Transformation par l'interpréteur bash |
|---|
| \a | Bip sonore |
| \b | Espacement arrière |
| \e | Échappement |
| \f | Saut de page (le nom anglais de ce caractère est form feed) |
| \n | Saut de ligne |
| \r | Retour chariot |
| \t | Caractère de tabulation horizontale |
| \v | Caractère de tabulation verticale |
| \\ | Anti-slash |
| \' | Un apostrophe (le nom anglais de ce caractère est quote) |
| \nnn | Le caractère 8-bits dont la valeur en octal est nnn |
| \xHH | Le caractère 8-bits dont la valeur en hexadécimal est HH |
| \cx | Le caractère contrôle-X |
Voir ASCII
Anti-slash avant un des meta-caractères du bash
Les meta-caractères, notamment "*" (étoile), sont interprétés par l'interpréteur bash (le plus souvent remplacement par d'éventuels fichiers), ce qui est gênant dans certains cas (commande find, sed, ...etc); exemple :
cd /etc;find . -name r*
Le message d'erreur sera
Find: Les chemins doivent précéder l'expression
Une des solutions est d'utiliser un anti-slash avant le caractère "*". Exemple :
cd /etc;find . -name r\*
Remarque
Une autre solution serait d'utiliser les guillemets. Exemple
cd /etc;find . -name "r*"