{"id":102,"date":"2017-08-28T16:23:35","date_gmt":"2017-08-28T16:23:35","guid":{"rendered":"http:\/\/www.technologue.net\/?p=102"},"modified":"2017-08-28T16:27:03","modified_gmt":"2017-08-28T16:27:03","slug":"redirection","status":"publish","type":"post","link":"http:\/\/www.technologue.net\/?p=102","title":{"rendered":"Redirection"},"content":{"rendered":"<p>Tous les programmes d\u00e9marrent avec 3 canaux d&rsquo;entr\u00e9e-sorties d\u00e9j\u00e0 ouverts. Ce sont:<\/p>\n<ul>\n<li>0 (<em>stdin<\/em>) : entr\u00e9e normale, g\u00e9n\u00e9ralement le clavier<\/li>\n<li>1 (<em>stdout<\/em>): sortie normale, g\u00e9n\u00e9ralement l&rsquo;\u00e9cran<\/li>\n<li>2 (<em>stderr<\/em>): sortie des messages d&rsquo;erreur, g\u00e9n\u00e9ralement l&rsquo;\u00e9cran<\/li>\n<\/ul>\n<p>bash nous permet de rediriger ces canaux vers les entr\u00e9e-sorties qui correspondent \u00e0 nos besoins. Trois caract\u00e8res sp\u00e9ciaux ( <strong>&lt;&gt;|<\/strong> ) sont utilis\u00e9s. Supposons le programme <em>unProg<\/em>:<\/p>\n<pre>unProg &lt;  fichier\u00a0\u00a0 # utiliser un fichier au lieu du clavier\r\nunProg &gt;  fichier\u00a0\u00a0 # rediriger la sortie vers un fichier (le vider d'abord)\r\nunProg &gt;&gt; fichier\u00a0\u00a0 # rediriger la sortie vers un fichier (ajouter au fichier)\r\nunProg | autreProg  # rediriger la sortie vers un autre programme<\/pre>\n<p>Un exemple:<\/p>\n<pre>cat fichier | wc -l # afficher le nombre de lignes du fichier<\/pre>\n<p>Le programme <em>cat<\/em> affiche le contenu d&rsquo;un fichier mais, dans ce cas-ci, sa sortie n&rsquo;ira pas vers l&rsquo;\u00e9cran mais plut\u00f4t vers le programme <em>wc -l<\/em> qui compte le nombre de ligne dans le texte entr\u00e9. Dans ce cas-ci, l&rsquo;entr\u00e9e de <em>wc<\/em> n&rsquo;est pas le clavier mais, \u00e0 cause de la redirection, c&rsquo;est plut\u00f4t la sortie du programme pr\u00e9c\u00e9dent.<\/p>\n<p>La forme g\u00e9n\u00e9rale d&rsquo;une redirection de fichier est <strong><em>n&gt;<\/em><\/strong> ou <strong><em>n&lt;<\/em><\/strong> o\u00f9 n est le num\u00e9ro du canal d&rsquo;entr\u00e9e-sortie. Donc:<\/p>\n<pre>unProg 2&gt; fichier_erreurs<\/pre>\n<p>redirige le canal 2 (les messages d&rsquo;erreurs) vers un fichier. On aura compris que <strong><em>&gt;<\/em><\/strong> (sans num\u00e9ro de canal) est une abr\u00e9viation de <strong><em>1&gt;<\/em><\/strong>.<\/p>\n<h2>Fusion de flux<\/h2>\n<p>La formulation <em>n&gt;&amp;m<\/em> permet de fusionner le canal <em>n<\/em> avec le canal <em>m<\/em><\/p>\n<p>Donc. la commande <em>unProg <strong>&gt; <\/strong>fichierX <strong>2&gt;&amp;1\u00a0<\/strong>\u00a0<\/em>\u00a0 signifie:<\/p>\n<ul>\n<li>envoyer la sortie normale vers fichierX<\/li>\n<li>fusionner le canal2 (erreurs) et le canal1 (sortie normale)<\/li>\n<\/ul>\n<p>Notez que l&rsquo;\u00e9valuation se fait de gauche \u00e0 droite et que, par cons\u00e9quent, la commande <em>unProg\u00a0 2&gt;&amp;1\u00a0 &gt;fichierX<\/em> ne dirige pas les messages d&rsquo;erreur vers fichierX<em><br \/>\n<\/em><\/p>\n<p>Autres exemples:<\/p>\n<pre>prog 1&gt; fich1 2&gt;fich2 # rediriger les canaux 1 et 2\r\nprog 2&gt; \/dev\/null\u00a0\u00a0\u00a0  # diriger la sortie d'erreur vers la poubelle<\/pre>\n<p>Note: il ne faut pas ins\u00e9rer d&rsquo;espace entre les caract\u00e8res de <em>n&gt;<\/em> ou <em>n&gt;&amp;m<\/em><\/p>\n<p>Dans le cas d&rsquo;une redirection vers un programme, on ne peut pas sp\u00e9cifier les canaux; c&rsquo;est toujours 1 vers 0 (sortie normale vers l&rsquo;entr\u00e9e). Si c&rsquo;est vraiment n\u00e9cessaire, il y a, bien sur, une fa\u00e7on de diriger 2 (les erreurs) vers l&rsquo;entr\u00e9e:<\/p>\n<pre>unProg 3&gt;&amp;1 \u00a0 1&gt;&amp;2 \u00a0 2&gt;&amp;3 | autreProg\u00a0 # on permute 1 et 2<\/pre>\n<h2><\/h2>\n","protected":false},"excerpt":{"rendered":"<p>Tous les programmes d\u00e9marrent avec 3 canaux d&rsquo;entr\u00e9e-sorties d\u00e9j\u00e0 ouverts. Ce sont: 0 (stdin) : entr\u00e9e normale, g\u00e9n\u00e9ralement le clavier 1 (stdout): sortie normale, g\u00e9n\u00e9ralement l&rsquo;\u00e9cran 2 (stderr): sortie des messages d&rsquo;erreur, g\u00e9n\u00e9ralement l&rsquo;\u00e9cran bash nous permet de rediriger ces canaux vers les entr\u00e9e-sorties qui correspondent \u00e0 nos besoins. Trois caract\u00e8res sp\u00e9ciaux ( &lt;&gt;| ) &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.technologue.net\/?p=102\" class=\"more-link\">Continuer la lecture<span class=\"screen-reader-text\"> de &laquo;&nbsp;Redirection&nbsp;&raquo;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[4,6],"tags":[8],"_links":{"self":[{"href":"http:\/\/www.technologue.net\/index.php?rest_route=\/wp\/v2\/posts\/102"}],"collection":[{"href":"http:\/\/www.technologue.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.technologue.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.technologue.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.technologue.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=102"}],"version-history":[{"count":1,"href":"http:\/\/www.technologue.net\/index.php?rest_route=\/wp\/v2\/posts\/102\/revisions"}],"predecessor-version":[{"id":103,"href":"http:\/\/www.technologue.net\/index.php?rest_route=\/wp\/v2\/posts\/102\/revisions\/103"}],"wp:attachment":[{"href":"http:\/\/www.technologue.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=102"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.technologue.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=102"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.technologue.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=102"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}