- 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">
<html>
<head>
<title>Les accents</title>
<title>Accents</title>
</head>
<body>
@ -230,7 +230,7 @@ scolaire 1999-2000.</li>
<div class="metainformation">
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>
</body>

View file

@ -4,7 +4,7 @@
"tuteurs://DTD/tml.dtd">
<html>
<head>
<title>Les accents sur Sun</title>
<title>Accents (Sun)</title>
<style type="text/css">
table.tableau td { font-family: monospace; text-align: center; }
</style>
@ -195,7 +195,7 @@ m
</table>
<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>
</body>

View file

@ -14,10 +14,11 @@
<p>
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
interprète les commandes. Par exemple, vous y tapez <code>pine</code> ou
<code>mutt</code>, <code>forum</code>, <code>cc</code>,
<code>mozilla</code>, etc.
s'agit du programme que vous utilisez régulièrement sur les machines
Unix de l'ENS (que ce soient les Sun, les PC sous FreeBSD ou autres
dérivés d'Unix), et qui interprète les commandes. Par exemple, vous y
tapez <code>pine</code> ou <code>mutt</code>, <code>forum</code>,
<code>cc</code>, <code>mozilla</code>, etc.
</p>
<p>
@ -167,6 +168,7 @@ Nous aurons alors&nbsp;:
<h3><a name="prog">Quels programmes utilisent le langage du shell ?</a></h3>
<h4>Les scripts shell</h4>
<p>
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
@ -174,6 +176,8 @@ les bases de la programmation de scripts shell. Les scripts servent
automatiser ou systématiser des tâches.
</p>
<h4>Le script <code>.profile</code></h4>
<p>
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
@ -187,10 +191,13 @@ config conscrits. Il est n
options.
</p>
<h4>Le script <code>.xinitrc</code></h4>
<p> Il existe encore le script <code>.xinitrc</code>, qui lance X&nbsp;;
X&nbsp;est le gestionnaire de fenêtres classique sous Unix.
</p>
<h4>Créer ses propres scripts</h4>
<p>
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
@ -205,18 +212,33 @@ l'inverse.
jokers</a></h3>
<p>
Il est parfois ennuyeux d'avoir à taper un nom complet de fichier comme
<code>nabuchodonosor</code>. Il est encore plus ennuyeux d'avoir à taper une
liste de fichier pour les donner en arguments à une commande, comme :
Il est souvent ennuyeux d'avoir à taper une longue liste de fichiers
pour les donner en arguments à une commande, comme&nbsp;:
</p>
<pre>cc -o foo bar.c gee.c buz.c gog.c</pre>
<p>
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>
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>
<p>
@ -271,44 +293,83 @@ affiche
(La commande <code>echo</code> se contente d'afficher ses arguments.)
</p>
<div class="attention">
<p>
&icone.attention; Attention :
</p>
<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 à
<code>mv</code> les arguments <code>foo.c bar.c foo.bak bar.bak</code>, et
<code>mv</code> ne sait pas quel fichier remplacer.
</li>
<li>Attention aux espaces. Si vous tapez <code>rm * ~</code>, le shell remplace
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
seront effacés.
</li>
<li><strong>C'est le shell qui fait le remplacement des arguments
contenant un joker</strong>. On ne peut donc pas faire <code>mv *.c
*.bak</code>, car le shell va passer à <code>mv</code> les arguments
<code>foo.c bar.c foo.bak bar.bak</code>, et <code>mv</code> ne sait pas
quel fichier remplacer. </li>
<li> <strong>Attention aux espaces</strong>. Si vous tapez <code>rm *
~</code>, le shell remplace 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 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>
<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>
<p>
@ -372,10 +433,11 @@ de savoir si
<h4>Les backquotes (<code>`</code>)</h4>
<p>
Dernière forme de quotation: <code>`<em>commande</em>`</code>. Le shell
exécute la <em>commande</em> indiquée entre backquotes, lit la sortie de la
commande mot par mot, et remplace <code>`</code> <em>commande</em>
<code>`</code> par la liste de ces mots. Exemple&nbsp;:
Dernière forme de citation&nbsp;: <code>`<em>commande</em>`</code>. Le
shell exécute la <em>commande</em> indiquée entre backquotes, lit la
sortie de la commande mot par mot, et remplace <code>`</code>
<em>commande</em> <code>`</code> par la liste de ces mots.
Exemple&nbsp;:
</p>
<pre>
@ -396,9 +458,9 @@ commande it <em>cmd</em>
/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>
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>.
</p>
<h4>Résumé</h4>
<p>
Pour résumer, chaque commande a donc&nbsp;:</p>
<ul>
@ -457,7 +522,7 @@ que renvoient les programmes s'inscrit
d'erreur renvoyés par les programmes s'affichent à l'écran.
</p>
<h4>Les redirections</h4>
<h3>Les redirections</h3>
<p>
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>.
</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>
@ -1171,7 +1261,7 @@ entra
<div class="metainformation">
Basé sur un polycopié de Roberto Di Cosmo, Xavier Leroy et Damien Doligez.
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>
</body>