- titres des deux pages sur les accents ;
- compléments et détails sur le shell.
This commit is contained in:
meles 2005-05-30 12:12:40 +00:00
parent e800de1cb2
commit 210117162d
3 changed files with 139 additions and 49 deletions

View file

@ -4,7 +4,7 @@
"tuteurs://DTD/tml.dtd"> "tuteurs://DTD/tml.dtd">
<html> <html>
<head> <head>
<title>Les accents</title> <title>Accents</title>
</head> </head>
<body> <body>
@ -230,7 +230,7 @@ scolaire 1999-2000.</li>
<div class="metainformation"> <div class="metainformation">
Auteur&nbsp;: Dominique Quatravaux, Émilia Robin. Dernière Auteur&nbsp;: Dominique Quatravaux, Émilia Robin. Dernière
modification le <date value="$Date: 2003-09-25 08:49:29 $" />. modification le <date value="$Date: 2005-05-30 12:12:40 $" />.
</div> </div>
</body> </body>

View file

@ -4,7 +4,7 @@
"tuteurs://DTD/tml.dtd"> "tuteurs://DTD/tml.dtd">
<html> <html>
<head> <head>
<title>Les accents sur Sun</title> <title>Accents (Sun)</title>
<style type="text/css"> <style type="text/css">
table.tableau td { font-family: monospace; text-align: center; } table.tableau td { font-family: monospace; text-align: center; }
</style> </style>
@ -195,7 +195,7 @@ m
</table> </table>
<div class="metainformation"> <div class="metainformation">
Auteur : Émilia Robin. Dernière modification le <date value="$Date: 2005-05-29 10:07:04 $" /> Auteur : Émilia Robin. Dernière modification le <date value="$Date: 2005-05-30 12:12:40 $" />
</div> </div>
</body> </body>

View file

@ -14,10 +14,11 @@
<p> <p>
Le mot <em>shell</em> signifie «&nbsp;coquille&nbsp;» en anglais. Il Le mot <em>shell</em> signifie «&nbsp;coquille&nbsp;» en anglais. Il
s'agit du programme que vous utilisez régulièrement à l'ENS, et qui s'agit du programme que vous utilisez régulièrement sur les machines
interprète les commandes. Par exemple, vous y tapez <code>pine</code> ou Unix de l'ENS (que ce soient les Sun, les PC sous FreeBSD ou autres
<code>mutt</code>, <code>forum</code>, <code>cc</code>, dérivés d'Unix), et qui interprète les commandes. Par exemple, vous y
<code>mozilla</code>, etc. tapez <code>pine</code> ou <code>mutt</code>, <code>forum</code>,
<code>cc</code>, <code>mozilla</code>, etc.
</p> </p>
<p> <p>
@ -167,6 +168,7 @@ Nous aurons alors&nbsp;:
<h3><a name="prog">Quels programmes utilisent le langage du shell ?</a></h3> <h3><a name="prog">Quels programmes utilisent le langage du shell ?</a></h3>
<h4>Les scripts shell</h4>
<p> <p>
La répétition de commandes complexes en ligne de commande du shell est La répétition de commandes complexes en ligne de commande du shell est
rapidement fastidieuse&nbsp;; aussi est-il très pratique de connaître rapidement fastidieuse&nbsp;; aussi est-il très pratique de connaître
@ -174,6 +176,8 @@ les bases de la programmation de scripts shell. Les scripts servent
automatiser ou systématiser des tâches. automatiser ou systématiser des tâches.
</p> </p>
<h4>Le script <code>.profile</code></h4>
<p> <p>
Il existe un script spécial, qui est exécuté au moment où on se connecte. Ce Il existe un script spécial, qui est exécuté au moment où on se connecte. Ce
script est contenu dans le fichier <code>$HOME/.profile</code>. C'est ce script est contenu dans le fichier <code>$HOME/.profile</code>. C'est ce
@ -187,10 +191,13 @@ config conscrits. Il est n
options. options.
</p> </p>
<h4>Le script <code>.xinitrc</code></h4>
<p> Il existe encore le script <code>.xinitrc</code>, qui lance X&nbsp;; <p> Il existe encore le script <code>.xinitrc</code>, qui lance X&nbsp;;
X&nbsp;est le gestionnaire de fenêtres classique sous Unix. X&nbsp;est le gestionnaire de fenêtres classique sous Unix.
</p> </p>
<h4>Créer ses propres scripts</h4>
<p> <p>
Le nombre de scripts possibles est illimité&nbsp;; vous pouvez en créer Le nombre de scripts possibles est illimité&nbsp;; vous pouvez en créer
autant que vous voulez, selon vos besoins&nbsp;: c'est ainsi que l'on autant que vous voulez, selon vos besoins&nbsp;: c'est ainsi que l'on
@ -205,18 +212,33 @@ l'inverse.
jokers</a></h3> jokers</a></h3>
<p> <p>
Il est parfois ennuyeux d'avoir à taper un nom complet de fichier comme Il est souvent ennuyeux d'avoir à taper une longue liste de fichiers
<code>nabuchodonosor</code>. Il est encore plus ennuyeux d'avoir à taper une pour les donner en arguments à une commande, comme&nbsp;:
liste de fichier pour les donner en arguments à une commande, comme :
</p> </p>
<pre>cc -o foo bar.c gee.c buz.c gog.c</pre> <pre>cc -o foo bar.c gee.c buz.c gog.c</pre>
<p> <p>
Pour éviter ces problèmes, on peut utiliser des <em>jokers</em> Pour éviter ces problèmes, on peut utiliser des <em>jokers</em>
(<em>wildcards</em> en anglais). (<em>wildcards</em> en anglais). Pourquoi ce nom&nbsp;? Eh bien, dans
certains jeux de cartes, le joker permet de remplacer n'importe quelle
carte&nbsp;; dans le shell, les jokers permettent de remplacer n'importe
quel caractère ou n'importe quelle séquence de caractères.
</p> </p>
<p>
Il existe principalement trois types de jokers&nbsp;:
</p>
<ul>
<li> l'étoile (*), qui remplace n'importe quelle séquence de
caractères&nbsp;;</li>
<li> le point d'interrogation, qui remplace n'importe quel
caractère&nbsp;;</li>
<li> les crochets ([]), qui remplacent n'importe quel caractère d'une
liste déterminée.</li>
</ul>
<h4>L'étoile : *</h4> <h4>L'étoile : *</h4>
<p> <p>
@ -271,44 +293,83 @@ affiche
(La commande <code>echo</code> se contente d'afficher ses arguments.) (La commande <code>echo</code> se contente d'afficher ses arguments.)
</p> </p>
<div class="attention">
<p> <p>
&icone.attention; Attention : &icone.attention; Attention :
</p> </p>
<ul> <ul>
<li>C'est le shell qui fait le remplacement des arguments contenant un joker.
On ne peut donc pas faire <code>mv *.c *.bak</code>, car le shell va passer à <li><strong>C'est le shell qui fait le remplacement des arguments
<code>mv</code> les arguments <code>foo.c bar.c foo.bak bar.bak</code>, et contenant un joker</strong>. On ne peut donc pas faire <code>mv *.c
<code>mv</code> ne sait pas quel fichier remplacer. *.bak</code>, car le shell va passer à <code>mv</code> les arguments
</li> <code>foo.c bar.c foo.bak bar.bak</code>, et <code>mv</code> ne sait pas
<li>Attention aux espaces. Si vous tapez <code>rm * ~</code>, le shell remplace quel fichier remplacer. </li>
l'étoile par la liste des fichiers présents, et ils seront tous effacés. Si
vous tapez <code>rm *~</code>, seuls les fichiers dont le nom finit par un tilde <li> <strong>Attention aux espaces</strong>. Si vous tapez <code>rm *
seront effacés. ~</code>, le shell remplace l'étoile par la liste des fichiers présents,
</li> et ils seront tous effacés. Si vous tapez <code>rm *~</code>, seuls les
fichiers dont le nom finit par un tilde seront effacés. </li>
</ul>
</div>
<div class="encadre">
<p>
<strong>Interlude&nbsp;:</strong> comment effacer un fichier nommé
<code>?*</code> ? On ne peut pas taper <code>rm ?*</code> car le shell
remplace <code>?*</code> par la liste de tous les fichiers du répertoire
courant. On peut taper <code>rm -i *</code> qui supprime tous les
fichiers, mais en demandant confirmation à chaque fichier. On répond
<code>n</code> à toutes les questions sauf <code>rm: remove  ?*</code>.
Autre méthode: utiliser les mécanismes de citation.
</p>
</div>
<h3><a name="quotation">Contourner les jokers&nbsp;: la citation (<i
lang="en">quotation</i>)</a></h3>
<p>
Avec tous ces caractères spéciaux, comment faire pour passer des
arguments bizarres à une commande&nbsp;? Par exemple, comment faire
afficher un point d'interrogation suivi d'une étoile et d'un dollar par
<code>echo</code>&nbsp;?</p>
<p>
On ne peut pas les taper directement dans la ligne de commande (ici,
avec le shell <code>zsh</code>), car le shell essaye de les interpréter
comme des jokers&nbsp;:
</p>
<pre><span class="prompt">chaland ~</span> echo ?*$
zsh: no matches found: ?*$</pre>
<p> Il faut donc indiquer au shell de ne pas interpréter ces caractères
comme des jokers. Pour cela, nous allons utiliser des mécanismes fournis
par le shell&nbsp;: les <i lang="en">quotations</i> (mot anglais
signifiant <em>citation</em>).
</p>
<p>
Les mécanismes de citation sont les suivants&nbsp;:
</p>
<ul>
<li> le backslash (<code>\</code>), qui protège un caractère de
l'interprétation par le shell&nbsp;;</li>
<li> les apostrophes ou <i lang="en">simple quotes</i>
(<code>'</code>), qui protègent une chaîne de caractères de
l'interprétation par le shell&nbsp;;</li>
<li> les guillemets doubles ou <i lang="en">double quotes</i>
(<code>&quot;</code>), qui protègent également une chaîne de caractères
de l'interprétation par le shell, mais avec plus de souplesse que les
précédents&nbsp;;</li>
<li> les <i lang="en">backquotes</i> (<code>`</code>), qui cite la
sortie d'une commande.</li>
</ul> </ul>
<p>
Interlude: comment effacer un fichier nommé <code>?*</code> ? On ne peut
pas taper <code>rm ?*</code> car le shell remplace <code>?*</code> par la
liste de tous les fichiers du répertoire courant. On peut taper <code>rm -i
*</code> qui supprime tous les fichiers, mais en demandant confirmation à
chaque fichier. On répond <code>n</code> à toutes les questions sauf
<code>rm: remove  ?*</code>.
Autre méthode: utiliser les mécanismes de quotation.
</p>
<h3><a name="quotation">Quotation</a></h3>
<p>
Avec tous ces caractères spéciaux, comment faire pour passer des arguments
bizarres à une commande ? Par exemple, comment faire afficher un point
d'interrogation suivi d'une étoile et d'un dollar par <code>echo</code> ?
Le shell fournit des mécanismes pour ce faire. Ce sont les
<em>quotations</em>.
</p>
<h4>Le backslash (<code>\</code>)</h4> <h4>Le backslash (<code>\</code>)</h4>
<p> <p>
@ -372,10 +433,11 @@ de savoir si
<h4>Les backquotes (<code>`</code>)</h4> <h4>Les backquotes (<code>`</code>)</h4>
<p> <p>
Dernière forme de quotation: <code>`<em>commande</em>`</code>. Le shell Dernière forme de citation&nbsp;: <code>`<em>commande</em>`</code>. Le
exécute la <em>commande</em> indiquée entre backquotes, lit la sortie de la shell exécute la <em>commande</em> indiquée entre backquotes, lit la
commande mot par mot, et remplace <code>`</code> <em>commande</em> sortie de la commande mot par mot, et remplace <code>`</code>
<code>`</code> par la liste de ces mots. Exemple&nbsp;: <em>commande</em> <code>`</code> par la liste de ces mots.
Exemple&nbsp;:
</p> </p>
<pre> <pre>
@ -396,9 +458,9 @@ commande it <em>cmd</em>
/usr/local/bin/emacs</pre> /usr/local/bin/emacs</pre>
<h3><a name="redirections">Entrée, sortie et redirection</a></h3> <h3><a name="redirections">Entrée et sortie</a></h3>
<h4>Entrée et sortie</h4> <h4>Que sont l'entrée et la sortie d'une commande&nbsp;?</h4>
<p> <p>
Un programme consiste à traiter des données, et à renvoyer des données Un programme consiste à traiter des données, et à renvoyer des données
@ -438,6 +500,9 @@ pas suivi des m
<strong>sortie standard</strong> et la <strong>sortie d'erreur</strong>. <strong>sortie standard</strong> et la <strong>sortie d'erreur</strong>.
</p> </p>
<h4>Résumé</h4>
<p> <p>
Pour résumer, chaque commande a donc&nbsp;:</p> Pour résumer, chaque commande a donc&nbsp;:</p>
<ul> <ul>
@ -457,7 +522,7 @@ que renvoient les programmes s'inscrit
d'erreur renvoyés par les programmes s'affichent à l'écran. d'erreur renvoyés par les programmes s'affichent à l'écran.
</p> </p>
<h4>Les redirections</h4> <h3>Les redirections</h3>
<p> <p>
Mais il ne s'agit là que du comportement par défaut, et pas d'un Mais il ne s'agit là que du comportement par défaut, et pas d'un
@ -474,6 +539,31 @@ programme <code>cueillette</code>, et envoyer la sortie (c'est-
les carottes cueillies) au programme <code>hachoir</code>. les carottes cueillies) au programme <code>hachoir</code>.
</p> </p>
<p>
Nous allons étudier successivement&nbsp;:
</p>
<ul>
<li> comment rediriger la sortie d'une commande vers un
fichier&nbsp;;</li>
<li> comment ajouter la sortie d'une commande à la fin d'un
fichier&nbsp;;</li>
<li> comment utiliser un fichier comme entrée d'une commande&nbsp;;</li>
<li> comment utiliser la sortie d'une commande comme entrée d'une
autre.</li>
</ul>
<p>
Ces différentes configurations esquissent la grammaire d'une utilisation
très performante des fonctionnalités du shell&nbsp;; <strong>vous saurez
en effet comment brancher un fichier sur l'entrée ou sur la sortie d'une
commande, et comment brancher la sortie d'une commande sur l'entrée
d'une autre</strong>. Il n'y a pas d'autre combinaison possible.
</p>
<h4>Rediriger la sortie dans un fichier : <code>&gt;</code></h4> <h4>Rediriger la sortie dans un fichier : <code>&gt;</code></h4>
@ -1171,7 +1261,7 @@ entra
<div class="metainformation"> <div class="metainformation">
Basé sur un polycopié de Roberto Di Cosmo, Xavier Leroy et Damien Doligez. Basé sur un polycopié de Roberto Di Cosmo, Xavier Leroy et Damien Doligez.
Ajustements&nbsp;: Nicolas George. Compléments&nbsp;: Baptiste Mélès. Ajustements&nbsp;: Nicolas George. Compléments&nbsp;: Baptiste Mélès.
Dernière modification le <date value="$Date: 2005-05-28 16:11:16 $" />. Dernière modification le <date value="$Date: 2005-05-30 12:12:40 $" />.
</div> </div>
</body> </body>