Bap:
- titres des deux pages sur les accents ; - compléments et détails sur le shell.
This commit is contained in:
parent
e800de1cb2
commit
210117162d
3 changed files with 139 additions and 49 deletions
|
@ -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 : Dominique Quatravaux, Émilia Robin. Dernière
|
Auteur : 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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
180
unix/shell.tml
180
unix/shell.tml
|
@ -14,10 +14,11 @@
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Le mot <em>shell</em> signifie « coquille » en anglais. Il
|
Le mot <em>shell</em> signifie « coquille » 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 :
|
||||||
|
|
||||||
<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 ; aussi est-il très pratique de connaître
|
rapidement fastidieuse ; 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 ;
|
<p> Il existe encore le script <code>.xinitrc</code>, qui lance X ;
|
||||||
X est le gestionnaire de fenêtres classique sous Unix.
|
X 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é ; vous pouvez en créer
|
Le nombre de scripts possibles est illimité ; vous pouvez en créer
|
||||||
autant que vous voulez, selon vos besoins : c'est ainsi que l'on
|
autant que vous voulez, selon vos besoins : 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 :
|
||||||
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 ? Eh bien, dans
|
||||||
|
certains jeux de cartes, le joker permet de remplacer n'importe quelle
|
||||||
|
carte ; 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 :
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li> l'étoile (*), qui remplace n'importe quelle séquence de
|
||||||
|
caractères ;</li>
|
||||||
|
<li> le point d'interrogation, qui remplace n'importe quel
|
||||||
|
caractère ;</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 :</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 : 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 ? Par exemple, comment faire
|
||||||
|
afficher un point d'interrogation suivi d'une étoile et d'un dollar par
|
||||||
|
<code>echo</code> ?</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 :
|
||||||
|
</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 : les <i lang="en">quotations</i> (mot anglais
|
||||||
|
signifiant <em>citation</em>).
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Les mécanismes de citation sont les suivants :
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li> le backslash (<code>\</code>), qui protège un caractère de
|
||||||
|
l'interprétation par le shell ;</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 ;</li>
|
||||||
|
<li> les guillemets doubles ou <i lang="en">double quotes</i>
|
||||||
|
(<code>"</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 ;</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 : <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 :
|
<em>commande</em> <code>`</code> par la liste de ces mots.
|
||||||
|
Exemple :
|
||||||
</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 ?</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 :</p>
|
Pour résumer, chaque commande a donc :</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 :
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li> comment rediriger la sortie d'une commande vers un
|
||||||
|
fichier ;</li>
|
||||||
|
|
||||||
|
<li> comment ajouter la sortie d'une commande à la fin d'un
|
||||||
|
fichier ;</li>
|
||||||
|
|
||||||
|
<li> comment utiliser un fichier comme entrée d'une commande ;</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 ; <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>></code></h4>
|
<h4>Rediriger la sortie dans un fichier : <code>></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 : Nicolas George. Compléments : Baptiste Mélès.
|
Ajustements : Nicolas George. Compléments : 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>
|
||||||
|
|
Loading…
Reference in a new issue