<- Aide:Syntaxe:Accueil|Aide:Syntaxe ^ Aide:Accueil|Accueil de l'aide ^ -> ====== Aide:Syntaxe:EXT CLI ====== **CLI** est l'abréviation de "Command Line Interface" qui signifie "interface en ligne de commande". Il s'agit d'une interface homme-machine dans laquelle la communication entre l'utilisateur et l'ordinateur s'effectue en mode texte : - l'utilisateur tape une ligne de commande, c'est-à-dire du texte au clavier pour demander à l'ordinateur d'effectuer une opération ; - l'ordinateur affiche du texte correspondant au résultat de l'exécution des commandes tapées ou à des questions qu'un logiciel pose à l'utilisateur. Voir [[wpfr>Interface en ligne de commande|Interface en ligne de commande]] sur Wikipédia pour plus de détail. Ici, l'extension CLI sert à représenter graphiquement ce que l'ordinateur retourne suite à une commande. Le [[doku>plugins:cli|CLI Plugin]] complète les possibilités et la présentation des balises ''%%%%''...''%%%%''. Voir [[blocs de code]]. ===== Description ===== Cette extension ajoute une syntaxe qui permet de présenter visuellement une interface en ligne de commande à Dokuwiki. Elle vous permet de aussi d'afficher les transcription de sortie (le résultat de la commande), par exemple pour afficher un manuel d'utilisation ou faire un didacticiel en ligne. Il est conçu pour fonctionner avec la sortie d'un [[wpfr>Bourne-Again shell|Unix Bash Shell]] standard, mais convient pour documenter d'autres types d'interaction CLI, par exemple, d'une [[wpfr>Console Windows]], [[wpfr>Python (langage)|Python]], [[wpfr>Interactive Ruby]], [[wpfr>MATLAB]], etc. Les hypothèses retenues pour la mise en forme sont : - toutes les commandes utilisateur commencent par une **invite de commande** ; - **l'invite de commande** d'un CLI se terminera par un caractère reconnaissable (généralement '$' ou '>') ; - les commandes de l'utilisateur suivront l'invite CLI sur la même ligne ; - les commandes de l'utilisateur peuvent contenir un commentaire introduit par un caractère facilement reconnaissable (généralement '#') ; - les lignes qui ne commencent pas par une invite sont des sorties du CLI (la réponse de l'ordinateur, le résultat). ===== Syntaxe ===== Il suffit de faire un copier le contenu de votre CLI et de le mettre entre les balises ''%%%%''...''%%%%''. Les paramètres utilisable sont : ^ Param ^ Valeurs ^ Notes ^ | prompt='VALEUR' | n/a | Permet de définir l'invite de commande si elle n'est pas reconnue par les [[wpfr>expressions régulières]] définies par défaut. Voir les exemples ci-après et voir les détails (en anglais) pour régler ce paramètre : [[doku>plugin:cli#configuration_and_settings|Configuration and settings]]. | | continue='VALEUR' | n/a | Permet de définir l'invite de poursuite si elle n'est pas reconnue pas défaut. Une invite de poursuite est une autre invite de commande qui ne peut apparaître qu'immédiatement après une ligne contenant l'invite initiale. Elle se règle exactement comme le paramètre 'prompt'. | | comment='VALEUR' | n/a | Permet de définir les marqueurs de commentaire. Comme les précédants paramètres il s'agit de définir une expression régulière si les commentaires ne sont pas reconnus par défaut. | | type=VALEUR FIXME | FIXME | FIXME | | VALEUR (une classe) FIXME | FIXME | FIXME | user@ubports:~$ apt moo (__) (oo) /------\/ / | || * /\---/\ ~~ ~~ ..."Have you mooed today?"... user@ubports:~$ user@ubports:~$ apt moo (__) (oo) /------\/ / | || * /\---/\ ~~ ~~ ..."Have you mooed today?"... user@ubports:~$ user@ordinosaure:~$ aptitude moo Il n'y a pas d'œufs de Pâques dans ce programme. user@ordinosaure:~$ user@ordinosaure:~$ aptitude moo Il n'y a pas d'œufs de Pâques dans ce programme. user@ordinosaure:~$ user@ordinosaure:~$ aptitude moo -v Il n'y a vraiment pas d'œufs de Pâques dans ce programme. user@ordinosaure:~$ user@ordinosaure:~$ aptitude moo -v Il n'y a vraiment pas d'œufs de Pâques dans ce programme. user@ordinosaure:~$ user@ordinosaure:~$ aptitude moo -vv Ne vous ai-je pas déjà dit qu'il n'y avait pas d'œufs de Pâques dans ce programme ? user@ordinosaure:~$ user@ordinosaure:~$ aptitude moo -vv Ne vous ai-je pas déjà dit qu'il n'y avait pas d'œufs de Pâques dans ce programme ? user@ordinosaure:~$ user@ordinosaure:~$ aptitude moo -vvv Arrêtez donc ! user@ordinosaure:~$ user@ordinosaure:~$ aptitude moo -vvv Arrêtez donc ! user@ordinosaure:~$ user@ordinosaure:~$ aptitude moo -vvvv D'accord, d'accord, si je vous donne un œuf de Pâques, vous en irez-vous ? user@ordinosaure:~$ user@ordinosaure:~$ aptitude moo -vvvv D'accord, d'accord, si je vous donne un œuf de Pâques, vous en irez-vous ? user@ordinosaure:~$ user@ordinosaure:~$ aptitude moo -vvvvv D'accord, vous avez gagné. /----\ -------/ \ / \ / | -----------------/ --------\ ---------------------------------------------- user@ordinosaure:~$ user@ordinosaure:~$ aptitude moo -vvvvv D'accord, vous avez gagné. /----\ -------/ \ / \ / | -----------------/ --------\ ---------------------------------------------- user@ordinosaure:~$ user@ordinosaure:~$ aptitude moo -vvvvvv Qu'est-ce que c'est ? C'est un éléphant qui se fait manger par un serpent, bien sûr. user@ordinosaure:~$ user@ordinosaure:~$ aptitude moo -vvvvvv Qu'est-ce que c'est ? C'est un éléphant qui se fait manger par un serpent, bien sûr. user@ordinosaure:~$ commodore basic v7.0 122365 bytes free (c)1986 commodore electronics, ldt. (c)1977 microsoft corps. all rights reserved Ready. Go64 are you sure?y commodore basic v7.0 122365 bytes free (c)1986 commodore electronics, ldt. (c)1977 microsoft corps. all rights reserved Ready. Go64 are you sure?y /* ====== Tests of CLI Plugin ====== This page provides a set of test cases for the [[plugins:cli|CLI Plugin]] and also serves as an example of its use. ===== Basic Shell Script ===== This shows that * basic ''%%%%'' is perfect for unix command line, * ''%%%%'' can nest, * ''%%%%'' works just fine with MS command box. Wiki text: user@host:~/somedir $ ls # List current directory conf plugin.info.txt README syntax.php lang style.css user@host:~/somedir $ wc info.txt # count words in info.txt 7 20 204 info.txt user@host:~/somedir $ ls \ > -l # Here we ask a long listing (-l) total 40 drwxr-xr-x 2 user user 4096 Dec 27 18:48 conf drwxr-xr-x 4 user user 4096 Dec 22 22:10 lang -rw-rw-rw- 1 user user 204 Dec 22 22:04 plugin.info.txt -rw-rw-rw- 1 user user 1220 Dec 27 18:45 README -rw-r--r-- 1 user user 184 Dec 28 02:13 style.css -rw-rw-rw- 1 user user 18822 Dec 28 06:11 syntax.php user@host:~/somedir $ dosemu (C) Copyright 1995-2006 Pasquale J. Villani and The FreeDOS Project. D: = LINUX\FS/HOME/USER attrib = READ/WRITE E: = LINUX\FS/MEDIA/CDROM CDROM:1 attrib = READ ONLY "Welcome to dosemu 1.4.0.8!" C:\>dir Volume in drive C is mu/drives/c Directory of C:\ TMP 12-28-17 6:29a CONFIG SYS 346 06-22-15 1:17a AUTOEXEC BAT 556 06-22-15 1:17a 2 file(s) 902 bytes 1 dir(s) 2,147,450,880 bytes free C:\>echo pouet pouet C:\>rem This is a remark and does nothing C:\>echo But this rem is not a remark. But this rem is not a remark. C:\>exit user@host:~/somedir $ echo Ah. Back to normal again Ah. Back to normal again user@host:~/somedir $ Rendered result : user@host:~/somedir $ ls # List current directory conf plugin.info.txt README syntax.php lang style.css user@host:~/somedir $ wc info.txt # count words in info.txt 7 20 204 info.txt user@host:~/somedir $ ls \ > -l # Here we ask a long listing (-l) total 40 drwxr-xr-x 2 user user 4096 Dec 27 18:48 conf drwxr-xr-x 4 user user 4096 Dec 22 22:10 lang -rw-rw-rw- 1 user user 204 Dec 22 22:04 plugin.info.txt -rw-rw-rw- 1 user user 1220 Dec 27 18:45 README -rw-r--r-- 1 user user 184 Dec 28 02:13 style.css -rw-rw-rw- 1 user user 18822 Dec 28 06:11 syntax.php user@host:~/somedir $ dosemu (C) Copyright 1995-2006 Pasquale J. Villani and The FreeDOS Project. D: = LINUX\FS/HOME/USER attrib = READ/WRITE E: = LINUX\FS/MEDIA/CDROM CDROM:1 attrib = READ ONLY "Welcome to dosemu 1.4.0.8!" C:\>dir Volume in drive C is mu/drives/c Directory of C:\ TMP 12-28-17 6:29a CONFIG SYS 346 06-22-15 1:17a AUTOEXEC BAT 556 06-22-15 1:17a 2 file(s) 902 bytes 1 dir(s) 2,147,450,880 bytes free C:\>echo pouet pouet C:\>rem This is a remark and does nothing C:\>echo But this rem is not a remark. But this rem is not a remark. C:\>exit user@host:~/somedir $ echo Ah. Back to normal again Ah. Back to normal again user@host:~/somedir $ ===== Ruby irb ===== Simple minded implementation will not work for results as end of prompt is same as results marker! But named type ''irb'' can handle ruby quite well. irb(main):001:0> 2+2 => 4 irb(main):002:0> irb(main):003:0> 2 + # This is a comment irb(main):004:0* 40 => 42 irb(main):005:0> irb(main):001:0> 2+2 => 4 irb(main):002:0> irb(main):001:0> 2 + # This is a comment irb(main):002:0* 40 => 42 irb(main):003:0> ===== Python ===== ActivePython 2.5.1.1 (ActiveState Software Inc.) based on Python 2.5.1 (r251:54863, May 1 2007, 17:47:05) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> 2+2 4 >>> ActivePython 2.5.1.1 (ActiveState Software Inc.) based on Python 2.5.1 (r251:54863, May 1 2007, 17:47:05) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> 2+2 4 >>> ===== Corner Cases ===== * The following codes don't display right # rpm -ivh darcs-1.0.9-3.fc6.i386.rpm Preparing... ########################################### [100%] 1:darcs ########################################### [100%] # rpm -ivh darcs-1.0.9-3.fc6.i386.rpm Preparing... ########################################### [100%] 1:darcs ########################################### [100%] Not sure to do about this as download progress marker uses same character as prompt! * CLI shouldn't silently eat intentional blank lines: End of original demo ----------------------------------------------- ===== Other examples ===== ==== blank lines ==== intentional blank lines are preserved user@host:~/somedir $ ls # List current directory conf lang README screen,gif ui info.txt manager.dat renderer.php syntax.php user@host:~/somedir $ # Yes the 2 blank lines above are intentional. user@host:~/somedir $ ls # List current directory conf lang README screen,gif ui info.txt manager.dat renderer.php syntax.php user@host:~/somedir $ # Yes the 2 blank lines above are intentional. ==== nesting ==== There are 2 %%%% nested here : user@host:~/somedir $ ls # List current directory | tee /tmp/foo < /dev/null conf lang README screen,gif ui info.txt manager.dat renderer.ph syntax.php z $ \ >>> # see next line >>> :<>> This is not a continuation line. user@host:~/somedir $ dosemu # two blank lines above. c:\> dir directory of C:\. . 16-12-2017 9:03 .. 16-12-2017 8:57 caramba txt 1023 16-12-2017 14:23 1 File(s) 1023 Bytes. 2 Dir(s) 262,111,744 Bytes free. C:\docs> exit user@host:~/somedir $ echo 'pouet & repouet' pouet & repouet user@host:~/somedir $ user@host:~/somedir $ ls # List current directory | tee /tmp/foo < /dev/null conf lang README screen,gif ui info.txt manager.dat renderer.ph syntax.php z $ \ >>> # see next line >>> :<>> This is not a continuation line. user@host:~/somedir $ dosemu # two blank lines above. c:\> dir directory of C:\. . 16-12-2017 9:03 .. 16-12-2017 8:57 caramba txt 1023 16-12-2017 14:23 1 File(s) 1023 Bytes. 2 Dir(s) 262,111,744 Bytes free. C:\docs> exit user@host:~/somedir $ echo 'pouet & repouet' pouet & repouet user@host:~/somedir $ --------------------- This could also have been done in one %%%% provided you are a master at regexp user@host:~/somedir $ ls # List current directory | tee /tmp/foo < /dev/null conf lang README screen,gif ui info.txt manager.dat renderer.ph syntax.php z $ \ >>> # see next line >>> :<>> This is not a continuation line. user@host:~/somedir $ dosemu # two blank lines above. c:\> cd docs c:\docs> dir directory of C:\docs. . 16-12-2017 9:03 .. 16-12-2017 8:57 caramba txt 1023 16-12-2017 14:23 1 File(s) 1023 Bytes. 2 Dir(s) 262,111,744 Bytes free. C:\docs> exit user@host:~/somedir $ echo 'pouet & repouet' pouet & repouet user@host:~/somedir $ user@host:~/somedir $ ls # List current directory | tee /tmp/foo < /dev/null conf lang README screen,gif ui info.txt manager.dat renderer.ph syntax.php z $ \ >>> # see next line >>> :<>> This is not a continuation line. user@host:~/somedir $ dosemu # two blank lines above. c:\> cd docs c:\docs> dir directory of C:\docs. . 16-12-2017 9:03 .. 16-12-2017 8:57 caramba txt 1023 16-12-2017 14:23 1 File(s) 1023 Bytes. 2 Dir(s) 262,111,744 Bytes free. C:\docs> exit user@host:~/somedir $ echo 'pouet & repouet' pouet & repouet user@host:~/somedir $ ===== prompt without space ===== Some command line do not use a space after their prompt. For example, cmd.exe or the command line interface of switch. In this case, use the preset nospace type user@myserver:~$ minicom Welcome to minicom 2.7 OPTIONS: I18n Compiled on Apr 22 2017, 09:14:19. Port /dev/ttyS1 Press CTRL-A Z for help on special keys console>enable Password:******************** console#config console(config)#crypto key generate dsa console(config)#crypto key generate rsa console(config)#ip ssh server console(config)#aaa authentication login networkList line console(config)#aaa authentication enable networkList line console(config)#line ssh console(config-line)#login authentication networkList console(config-line)#enable authentication networkList console(config-line)#password Sup3rPassW0RD console(config-line)#exit console(config)#exit console#copy running-config startup-config user@myserver:~$ minicom Welcome to minicom 2.7 OPTIONS: I18n Compiled on Apr 22 2017, 09:14:19. Port /dev/ttyS1 Press CTRL-A Z for help on special keys console>enable Password:******************** console#config console(config)#crypto key generate dsa console(config)#crypto key generate rsa console(config)#ip ssh server console(config)#aaa authentication login networkList line console(config)#aaa authentication enable networkList line console(config)#line ssh console(config-line)#login authentication networkList console(config-line)#enable authentication networkList console(config-line)#password Sup3rPassW0RD console(config-line)#exit console(config)#exit console#copy running-config startup-config */