Se connecter
Se connecter
Inscription
Mot de passe perdu
Connexion:
[Actualités]
Nvidia prévient d'une pénurie de GPU ce trimestre, avec une reprise début 2025
[Actualités]
Les Technos #469 : Un jour sans fin
[Actualités]
Test Farming Simulator 25 (PS5) - Des innovations intéressantes mais des perfor...
[Actualités]
Qualcomm souhaite réduire davantage les prix des PC Windows basés sur ARM
[Actualités]
Finalement, Google préparerait une nouvelle tablette mais la Pixel Tablet 2 ser...
[Actualités]
Windows 10 version 22H2 : erreur de mise à jour et de désinstallation
[Actualités]
OpenAI prépare désormais son propre navigateur
[Actualités]
WhatsApp bat Telegram : les transcriptions des messages vocaux arrivent pour tou...
[Actualités]
Unreal et Unreal Tournament désormais gratuits sur Internet Archive
[Actualités]
Windows 10 : Microsoft affiche des publicités en plein écran pour les PC équi...
[Articles]
Dungeons 4 - Nintendo Switch Edition
[Articles]
The Bridge Curse 2 : The Extrication
[Articles]
Farmagia
[Articles]
I*CHU: Chibi Edition
[Articles]
Farming Simulator 25
[Articles]
Goblin Slayer -Another Adventurer- Nightmare Feast
[Articles]
Deel lance des programmes en marque blanche et pour les revendeurs pour plus de ...
[Articles]
ESET Research : WolfsBane, nouvelle porte dérobée de cyber-espionnage Linux cr...
[Articles]
Devoteam présente son nouveau plan stratégique « AMPLIFY » avec un fort acce...
[Articles]
LEGO Horizon Adventures
Actualités
Lettre d'information
Proposer une actualité
Archives
Actualités
Articles
Programmation
Press Release
Matériel
Logiciels
Livres
Interviews
Derniers commentaires
Jeux Vidéos
XBox One
XBox 360
Wii U
PSP
PS4
PS3
PC
DS
GameCube
3DS
Forum
Derniers messages
Informatique
Fun
Divers
Logithèque
Blogs
Divers
A Propos
Annonceurs
Contact
Recherche
RSS
Editer un article
Titre
Mots Clés
Texte
[size=18] [b]Nom[/b] [/size] tcsh - shell C avec complètement des noms de fichiers et édition de lignes de commandes [size=18] [b]Résumé[/b] [/size] [b]tcsh [[b][/b]-bcdefFimnqstvVxX] [[b][/b]-Dnom[[b]=valeur[/b]]] [arg ...][/b] [b][/b] [b]tcsh -l[/b] [size=18] [b]Description[/b] [/size] [i]tcsh[/i] est une version améliorée mais complètement compatible du shell C du UNIX de Berkeley, [i]csh[/i](1). C'est un interpréteur de langage de commandes utilisable à la fois comme shell de connexion interactif et comme processeur de commandes de scripts shell. Il inclut un éditeur de ligne de commandes complet (voyez [b]L'éditeur[/b] de ligne de commandes), un complètement des mots programmable (voyez [b]Complètement[/b] et listage), une correction orthographique (voyez [b]Correction[/b] orthographique), un mécanisme d'historique (voyez [b]Substitution[/b] d'historique), un contrôle des travaux (voyez [b]Travaux[/b]) et une syntaxe semblable à celle du C. La section [b]NOUVELLES[/b] FONCTIONNALITÉS décrit les améliorations majeures de [i]tcsh[/i] par rapport à [i]csh[/i](1). Tout au long de ce manuel, les fonctionnalités de [i]tcsh[/i] qu'on ne trouve pas dans la plupart des implémentations de [i]csh[/i] (spécifiquement le [i]csh[/i] de BSD4.4) sont marquées par un « (+) », et les fonctionnalités qui sont présentes dans [i]csh[/i](1) mais qui ne sont généralement pas documentées sont marquées par un « (u) ». [b]Traitement de la liste darguments[/b] Si le premier argument (argument 0) du shell est « - », alors c'est un shell de connexion. Un shell de connexion peut également être spécifié en invoquant le shell avec l'option [b][/b]-l pour seul argument. Les autres arguments options sont interprétés comme suit : [b]-b[/b] [table][row][col] [/col][col]Forcer une « cassure » lors du traitement des options, en faisant en sorte que tout argument ultérieur soit traité comme un argument non option. Les arguments restants ne seront pas interprétés comme des options du shell. Cela peut être utile pour passer des options à un script shell en évitant une confusion ou un éventuel subterfuge. Le shell n'exécutera pas de script SUID sans cette option.[/col][/row][/table] [b]-c[/b] [table][row][col] [/col][col]Les commandes sont lues à partir de l'argument suivant (qui doit être présent, et qui doit être seul), stockées dans la variable shell [b]command[/b] pour pouvoir être référencées, et exécutées. Tous les arguments restants sont placés dans la variable shell [b]argv[/b].[/col][/row][/table] [b]-d[/b] [table][row][col] [/col][col]Le shell charge la pile de répertoires à partir de [i]~/.cshdirs[/i] comme décrit dans [b]Démarrage[/b] et arrêt, que ce soit un shell de connexion ou non. (+)[/col][/row][/table] [b]-D[i]nom[/i][=[i]valeur[/i]][/b] [table][row][col] [/col][col]Fournit une [i]valeur[/i] à la variable d'environnement [i]nom[/i]. (Domain/OS uniquement) (+)[/col][/row][/table] [b]-e[/b] [table][row][col] [/col][col]Le shell se termine si une des commandes invoquées se termine anormalement ou produit une valeur de retour non nulle.[/col][/row][/table] [b]-f[/b] [table][row][col] [/col][col]Le shell ignore [i]~/.tcshrc[/i], et démarre ainsi plus rapidement.[/col][/row][/table] [b]-F[/b] [table][row][col] [/col][col]Le shell utilise [i]fork[/i](2) au lieu de [i]vfork[/i](2) pour créer des processus. (Convex/OS uniquement) (+)[/col][/row][/table] [b]-i[/b] [table][row][col] [/col][col]Le shell est interactif et demande une entrée de haut niveau, même si elle ne semble pas provenir d'un terminal. Les shells sont interactifs sans cette option si leurs entrées et sorties sont des terminaux.[/col][/row][/table] [b]-l[/b] [table][row][col] [/col][col]Le shell est un shell de connexion. Applicable uniquement si [b][/b]-l est la seule option spécifiée.[/col][/row][/table] [b]-m[/b] [table][row][col] [/col][col]Le shell charge [i]~/.tcshrc[/i] même s'il n'appartient pas à l'utilisateur effectif. Des versions plus récentes de [i]su[/i](1) peuvent passer [b][/b]-m au shell. (+)[/col][/row][/table] [b]-n[/b] [table][row][col] [/col][col]Le shell analyse les commandes mais ne les exécute pas. Cela aide au débogage des scripts shell.[/col][/row][/table] [b]-q[/b] [table][row][col] [/col][col]Le shell accepte SIGQUIT (voyez [b]Traitement[/b] des signaux) et agit quand il est utilisé sous un débogueur. Le contrôle des travaux est désactivé. (u)[/col][/row][/table] [b]-s[/b] [table][row][col] [/col][col]Les commandes d'entrée sont lues à partir de l'entrée standard.[/col][/row][/table] [b]-t[/b] [table][row][col] [/col][col]Le shell lit et exécute une ligne d'entrée. Un « » peut être utilisé pour protéger le saut de ligne (« ») et continuer sur une autre ligne.[/col][/row][/table] [b]-v[/b] [table][row][col] [/col][col]Définit la variable shell [b]verbose[/b], afin que l'entrée de la commande soit renvoyée en écho après la substitution d'historique.[/col][/row][/table] [b]-x[/b] [table][row][col] [/col][col]Définit la variable shell [b]echo[/b], afin que les commandes soient renvoyées en écho juste avant leur exécution.[/col][/row][/table] [b]-V[/b] [table][row][col] [/col][col]Définit la variable shell [b]verbose[/b] avant même d'exécuter [i]~/.tcshrc[/i].[/col][/row][/table] [b]-X[/b] [table][row][col] [/col][col]Est à [b][/b]-x ce que [b][/b]-V est à [b][/b]-v.[/col][/row][/table] Après le traitement des arguments options, s'il reste des arguments mais qu'aucune des options [b][/b]-c, [b][/b]-i, [b][/b]-s ou [b][/b]-t n'est fournie, le premier argument est supposé être le nom d'un fichier de commandes, c.-à-d. le « script » à exécuter. Le shell ouvre ce fichier et sauvegarde son nom pour une éventuelle re-substitution pour « $0 ». Puisque de nombreux systèmes utilisent les shells standard version 6 ou 7 dont les scripts ne sont pas compatibles avec ce shell, celui-ci utilise un tel shell « standard » pour exécuter un script dont le premier caractère n'est pas un « # », c.-à-d. qui ne commence pas par un commentaire. Les arguments restants sont placés dans la variable shell [b]argv[/b]. [b]Démarrage et arrêt[/b] Un shell de connexion démarre en exécutant les commandes des fichiers système [i]/etc/csh.cshrc[/i] et [i]/etc/csh.login[/i]. Il exécute ensuite les commandes des fichiers situés dans le répertoire personnel ([b]home[/b]) de l'utilisateur : d'abord [i]~/.tcshrc[/i] (+) ou, s'il n'est pas trouvé, [i]~/.cshrc[/i] ; ensuite [i]~/.history[/i] (ou la valeur de la variable shell [b]histfile[/b]) ; puis [i]~/.login[/i] ; et finalement [i]~/.cshdirs[/i] (ou la valeur de la variable shell [b]dirsfile[/b]) (+). Le shell peut lire [i]/etc/csh.login[/i] avant plutôt qu'après [i]/etc/csh.cshrc[/i], et [i]~/.login[/i] avant plutôt qu'après [i]~/.tcshrc[/i] ou [i]~/.cshrc[/i] et [i]~/.history[/i], s'il est compilé ainsi ; voyez la variable shell [b]version[/b]. (+) Les shells non de connexion ne lisent que [i]/etc/csh.cshrc[/i] et [i]~/.tcshrc[/i] ou [i]~/.cshrc[/i] au démarrage. Pour des exemples de fichiers de démarrage, veuillez consulter [i]http://tcshrc.sourceforge.net[/i]. Les commandes comme [i]stty[/i](1) et [i]tset[/i](1), qui ne doivent être exécutées qu'une fois par connexion, sont habituellement situées dans un des fichiers [i]~/.login[/i]. Les utilisateurs qui doivent utiliser le même jeu de fichiers pour [i]csh[/i](1) et [i]tcsh[/i] peuvent n'avoir qu'un seul [i]~/.cshrc[/i] qui vérifie l'existence de la variable shell [b]tcsh[/b] avant d'utiliser des commandes spécifiques à [i]tcsh[/i], ou peuvent avoir à la fois un [i]~/.cshrc[/i] et un [i]~/.tcshrc[/i] qui emploient comme [i]source[/i] (voyez la commande intégrée) le fichier [i]~/.cshrc[/i]. Le reste de ce manuel utilisera « [i]~/.tcshrc[/i] » pour vouloir dire « [i]~/.tcshrc[/i] » ou, si [i]~/.tcshrc[/i] n'est pas trouvé, « [i]~/.cshrc[/i] ». Normalement, le shell commence à lire des commandes à partir du terminal, en affichant l'invite « > ». (Le traitement des arguments et l'utilisation du shell pour traiter les fichiers contenant des scripts de commandes seront décrits plus tard.) Le shell effectue à plusieurs reprises la boucle suivante : il lit une ligne d'entrée de commande, la découpe en mots, la place dans la liste d'historique de commandes, l'analyse et exécute chaque commande de la ligne. On peut se déconnecter en tapant « ^D » sur une ligne vide, en tapant « logout » ou « login », ou encore via le mécanisme de déconnexion automatique du shell (voyez la variable shell [b]autologout[/b]). Quand un shell de connexion se termine, il donne la valeur appropriée (« normal » ou « automatic ») à la variable shell [b]logout[/b], et exécute ensuite les commandes des fichiers [i]/etc/csh.logout[/i] et [i]~/.logout[/i]. Le shell peut ignorer le DTR à la déconnexion si cela est compilé ; voyez la variable shell [b]version[/b]. Les noms des fichiers de connexion et de déconnexion varient selon les systèmes pour assurer la compatibilité avec les différentes variantes de [i]csh[/i](1) ; voyez [b]FICHIERS[/b]. [b]Édition[/b] Nous décrivons d'abord [b]L'éditeur[/b] de ligne de commandes. Les sections [b]Complètement[/b] et listage et [b]Correction[/b] orthographique décrivent deux ensembles de fonctionnalités qui sont implémentées sous forme de commandes d'éditeur, mais qui méritent un traitement spécifique. Finalement, la section [b]Commandes[/b] de l'éditeur liste et décrit les commandes d'éditeur spécifiques au shell et leurs liaisons par défaut. [b]Léditeur de ligne de commandes (+)[/b] L'entrée de la ligne de commandes peut être éditée en utilisant des séquences de touches semblables à celles employées dans GNU Emacs ou [i]vi[/i](1). L'éditeur n'est actif que lorsque la variable shell [b]edit[/b] est définie, ce qui est le cas par défaut dans les shells interactifs. La commande intégrée [i]bindkey[/i] peut afficher et modifier les liaisons de touches. Des liaisons de touches de style Emacs sont utilisées par défaut (à moins que le shell n'ait été compilé différemment ; voyez la variable shell [b]version[/b]), mais [i]bindkey[/i] peut modifier les liaisons de touches pour utiliser un style [i]vi[/i]. Le shell associe toujours les touches fléchées (comme définies dans la variable d'environnement [b]TERMCAP[/b]) à [table][row][col] [/col][col] [table][row][col] [/col][col]bas [i]down-history[/i][/col][/row][/table] [table][row][col] [/col][col]haut [i]up-history[/i][/col][/row][/table] [table][row][col] [/col][col]gauche [i]backward-char[/i][/col][/row][/table] [table][row][col] [/col][col]droite [i]forward-char[/i][/col][/row][/table] [/col][/row][/table] à moins que procéder ainsi n'altère une autre liaison de caractère. On peut donner aux séquences d'échappement de touches fléchées la valeur « chaîne vide » ("") en utilisant [i]settc[/i] pour empêcher ces liaisons. Les séquences ANSI/VT100 pour les touches fléchées sont toujours liées. Les autres liaisons de touches sont, pour la plupart, celles auxquelles les utilisateurs d'[i]emacs[/i](1) et de [i]vi[/i](1) s'attendent et peuvent facilement être affichées par [i]bindkey[/i], de sorte qu'il n'est pas nécessaire de les lister ici. De même, [i]bindkey[/i] peut lister les commandes d'éditeur accompagnées d'une courte description de chacune d'entre elles. Notez que les commandes d'éditeur n'ont pas la même notion de « mot » que celle qu'a le shell. L'éditeur délimite les mots par n'importe quel caractère non alphanumérique ne faisant pas partie de la variable shell [b]wordchars[/b], alors que le shell ne reconnaît que les caractères d'espacement et certains des caractères ayant une signification spéciale pour lui, qui sont listés dans [b]Structure[/b] Lexicale. [b]Complètement et listage (+)[/b] Le shell est souvent capable de compléter des mots quand on lui fournit une abréviation unique. Tapez une partie d'un mot (par exemple « ls /usr/lost ») et appuyez sur la touche tab pour lancer la commande d'éditeur [i]complete-word[/i] (compléter-mot). Le shell complète le nom de fichier « /usr/lost » en « /usr/lost+found/ », en remplaçant le mot incomplet par le mot complet dans le tampon d'entrée. (Note sur le « / » terminal : le complètement ajoute un « / » à la fin des répertoires complétés, et une espace à la fin des autres mots complétés, pour accélérer la frappe et fournir un indicateur visuel d'un complètement réussi. La variable shell [b]addsuffix[/b] peut être indéfinie pour éviter cela.) Si aucune correspondance n'est trouvée (« /usr/lost+found » n'existe peut-être pas), la sonnerie du terminal retentit. Si le mot est déjà complet (il y a peut-être un « /usr/lost » sur votre système, ou vous avez peut-être pensé trop loin et avez déjà tapé le mot en entier), un « / » ou une espace est ajouté(e) à la fin si il/elle n'y était pas déjà. Le complètement fonctionne partout sur la ligne, et pas uniquement à la fin ; le texte complété pousse le reste de la ligne sur la droite. Le complètement au milieu d'un mot résulte souvent en des caractères excédentaires à la droite du curseur qui devront être effacés. Les commandes et les variables peuvent être complétées d'une façon fort similaire. Par exemple, taper « em[tab] » complète « em » en « emacs » si [i]emacs[/i] est la seule commande sur votre système débutant par « em ». Le complètement peut trouver une commande si elle est située dans n'importe quel répertoire du [b]path[/b], ou bien si on lui fournit un nom de chemin complet. Taper « echo $ar[tab] » complète « $ar » en « $argv » si aucune autre variable ne commence par « ar ». Le shell examine le tampon d'entrée pour déterminer si le mot que vous voulez compléter doit être complété en tant que nom de fichier, commande ou variable. Le premier mot du tampon et le premier mot suivant « ; », « | », « |& », « && » ou « || » sont considérés être des commandes. Un mot débutant par « $ » est considéré être une variable. Tout le reste est considéré être un nom de fichier. Une ligne vide est « complétée » en tant que nom de fichier. Vous pouvez lister les complètements possibles d'un mot à tout moment en tapant « ^D » pour lancer la commande d'éditeur [i]delete-char-or-list-or-eof[/i]. Le shell liste les complètements possibles en utilisant la commande intégrée [i]ls[/i]-F et réaffiche l'invite et la ligne de commandes non terminée, par exemple : "" 4 [table][row][col] [/col][col]> ls /usr/l[^D] [b][/b] lbin/ lib/ local/ lost+found/ [b][/b] > ls /usr/l[/col][/row][/table] Si la variable shell [b]autolist[/b] est définie, le shell liste les choix restants (s'il y en a) à chaque fois que le complètement échoue : "" 4 [table][row][col] [/col][col]> set autolist [b][/b] > nm /usr/lib/libt[tab] [b][/b] libtermcap.a@ libtermlib.a@ [b][/b] > nm /usr/lib/libterm[/col][/row][/table] Si [b]autolist[/b] vaut « ambiguous », les choix ne sont listés que lorsque le complètement échoue et n'ajoute aucun nouveau caractère au mot en cours de complètement. Un nom de fichier à compléter peut contenir des variables, votre répertoire personnel ou celui d'autres personnes abrégé en « ~ » (voyez [b]Substitution[/b] des noms de fichiers), et des entrées de la pile de répertoires abrégées avec « = » (voyez [b]Substitution[/b] de pile de répertoires). Par exemple, "" 4 [table][row][col] [/col][col]> ls ~k[^D] [b][/b] kahn kas kellogg [b][/b] > ls ~ke[tab] [b][/b] > ls ~kellogg/[/col][/row][/table] ou "" 4 [table][row][col] [/col][col]> set local = /usr/local [b][/b] > ls $lo[tab] [b][/b] > ls $local/[^D] [b][/b] bin/ etc/ lib/ man/ src/ [b][/b] > ls $local/[/col][/row][/table] Notez que les variables peuvent également être développées explicitement via la commande d'éditeur [i]expand-variables[/i]. [i]delete-char-or-list-or-eof[/i] liste uniquement à la fin de la ligne ; au milieu d'une ligne, elle efface le caractère situé sous le curseur et, sur une ligne vide, provoque la déconnexion ou, si [b]ignoreeof[/b] est définie, ne fait rien. « M-^D », lié à la commande d'éditeur [i]list-choices[/i], liste les complètements possibles n'importe où sur une ligne, et [i]list-choices[/i] (ou n'importe laquelle des commandes d'éditeur apparentées qui effacent ou non, listent et/ou déconnectent, qui sont listées sous [i]delete-char-or-list-or-eof[/i]), peut être liée à « ^D » avec la commande intégrée [i]bindkey[/i] si vous le souhaitez. Les commandes d'éditeur [i]complete-word-fwd[/i] et [i]complete-word-back[/i] (qui ne sont liées à aucune touche par défaut) peuvent être utilisées pour cycler entre les différents complètements possibles, en remplaçant le mot courant par le mot suivant ou précédent dans la liste. La variable shell [b]fignore[/b] peut être définie en tant que liste de suffixes à ignorer lors du complètement. Considérez le cas suivant : "" 4 [table][row][col] [/col][col]> ls [b][/b] Makefile condiments.h~ main.o side.c [b][/b] README main.c meal side.o [b][/b] condiments.h main.c~ [b][/b] > set fignore = (.o ~) [b][/b] > emacs ma[^D] [b][/b] main.c main.c~ main.o [b][/b] > emacs ma[tab] [b][/b] > emacs main.c[/col][/row][/table] « main.c~ » et « main.o » sont ignorés lors du complètement (mais pas par le listage), car ils se terminent par un des suffixes de [b]fignore[/b]. Notez qu'un « » est nécessaire devant « ~ » pour éviter qu'il ne soit développé en [b]home[/b] comme décrit dans [b]Substitution[/b] des noms de fichiers. [b]fignore[/b] est ignoré si un seul complètement est possible. Si la variable shell [b]complete[/b] vaut « enhance », le complètement 1) ignore la casse et 2) considère les points, tirets et caractères de soulignement (« . », « - » et « _ ») comme étant des séparateurs de mots, et que les tirets et les caractères de soulignement sont équivalents. Si vous aviez les fichiers "" 4 [table][row][col] [/col][col]comp.lang.c comp.lang.perl comp.std.c++ [b][/b] comp.lang.c++ comp.std.c[/col][/row][/table] et que vous aviez tapé « mail -f c.l.c[tab] », cela serait complété en « mail -f comp.lang.c », et ^D listerait « comp.lang.c » et « comp.lang.c++ ». « mail -f c..c++[^D] » listerait « comp.lang.c++ » et « comp.std.c++ ». Taper « rm a--file[^D] » dans le répertoire suivant "" 4 [table][row][col] [/col][col]A_silly_file a-hyphenated-file another_silly_file[/col][/row][/table] listerait tous les trois fichiers, car la casse est ignorée et les tirets et caractères de soulignement sont équivalents. Les points ne sont néanmoins pas équivalents aux tirets et aux caractères de soulignement. Le complètement et le listage sont affectés par beaucoup d'autres variables shell : [b]recexact[/b] peut être définie pour ne compléter que vers la correspondance unique la plus courte possible, même si taper plus de caractères peut résulter en une correspondance plus longue : "" 4 [table][row][col] [/col][col]> ls [b][/b] fodder foo food foonly [b][/b] > set recexact [b][/b] > rm fo[tab][/col][/row][/table] émet juste un bip, car « fo » peut être développé en « fod » ou « foo », mais si nous tapons un autre « o », "" 4 [table][row][col] [/col][col]> rm foo[tab] [b][/b] > rm foo,[/col][/row][/table] le complètement se fait vers « foo », même si « food » et « foonly » correspondent également. [b]autoexpand[/b] peut être définie pour lancer la commande d'éditeur [i]expand-history[/i] avant chaque tentative de complètement, [b]autocorrect[/b] peut être définie pour corriger l'orthographe du mot à compléter (voyez [b]Correction[/b] orthographique) avant chaque tentative de complètement et [b]correct[/b] peut être définie pour compléter les commandes automatiquement après que l'on ait tapé sur « entrée ». [b]matchbeep[/b] peut être définie pour faire en sorte que le complètement bippe ou pas dans un certain nombre de situations, et [b]nobeep[/b] peut être définie pour ne jamais bipper. [b]nostat[/b] peut être définie pour fournir une liste de répertoires et/ou de motifs qui leur correspondent afin d'éviter que le mécanisme de complètement n'effectue un [i]stat[/i](2) sur ces répertoires. [b]listmax[/b] et [b]listmaxrows[/b] peuvent être définies pour limiter le nombres d'éléments et de lignes (respectivement) qui sont listés sans le demander au préalable. [b]recognize_only_executables[/b] peut être définie pour que le shell ne liste que les exécutables lors d'un listage de commandes, mais c'est assez lent. Finalement, la commande intégrée [i]complete[/i] peut être utilisée pour indiquer au shell la façon de compléter les mots différents des noms de fichiers, de commandes ou de variables. Le complètement et le listage ne fonctionnent pas sur les motifs génériques (glob-pattern, voyez [b]Substitution[/b] des noms de fichiers), mais les commandes d'éditeur [i]list-glob[/i] et [i]expand-glob[/i] accomplissent des fonctions équivalentes pour les motifs génériques. [b]Correction orthographique (+)[/b] Le shell peut parfois corriger l'orthographe des noms de fichiers, de commandes et de variables en plus de les compléter et de les lister. Les mots individuels peuvent être corrigés avec la commande d'éditeur [i]spell-word[/i] (habituellement liée à M-s et M-S) et le tampon d'entrée entier avec [i]spell-line[/i] (liée habituellement à M-$). La variable shell [b]correct[/b] peut être fixée à « cmd » pour corriger le nom de commande, ou « all » pour corriger la ligne entière à chaque fois que la touche entrée est enfoncée, et [b]autocorrect[/b] peut être fixée de sorte à corriger le mot à compléter avant chaque tentative de complètement. Quand la correction orthographique est invoquée d'une de ces façons, et que le shell pense qu'une partie quelconque de la ligne de commandes est mal orthographiée, il affiche l'invite avec la ligne corrigée : "" 4 [table][row][col] [/col][col]> set correct = cmd [b][/b] > lz /usr/bin [b][/b] CORRECT>ls /usr/bin (y|n|e|a)?[/col][/row][/table] On peut répondre « y » ou espace pour exécuter la ligne corrigée, « e » pour laisser la commande non corrigée dans le tampon d'entrée, « a » pour annuler la commande comme si « ^C » avait été tapé, et n'importe quoi d'autre pour exécuter la ligne originale non modifiée. La correction orthographique reconnaît les complètements définis par l'utilisateur (voyez la commande intégrée [i]complete[/i]). Si un mot d'entrée situé à une position pour laquelle un complètement est défini ressemble à un mot de la liste des complètements, la correction orthographique enregistrera une faute de frappe et suggérera ce dernier mot pour effectuer la correction. Néanmoins, si le mot d'entrée ne correspond à aucun des complètements possibles pour cette position, la correction orthographique n'enregistrera pas de faute de frappe. Comme pour le complètement, la correction orthographique fonctionne partout sur la ligne, et repousse le reste de la ligne sur la droite en laissant éventuellement des caractères excédentaires à la droite du curseur. Attention : la correction orthographique peut ne pas fonctionner comme vous le souhaitez, et n'est principalement fournie qu'en tant que fonctionnalité expérimentale. Les suggestions et les améliorations sont les bienvenues. [b]Commandes de léditeur (+)[/b] « bindkey » liste les liaisons de touches et « bindkey -l » liste et décrit brièvement les commandes d'édition. Seules les commandes nouvelles ou particulièrement intéressantes seront décrites ici. Voyez [i]emacs[/i](1) et [i]vi[/i](1) pour obtenir les descriptions des liaisons de touches de chacun de ces éditeurs. Le(s) caractère(s) au(x)quel(s) chaque commande est liée par défaut est (sont) fourni(s) entre parenthèses. « ^[i]caractère[/i] » signifie un caractère de contrôle et « M-[i]caractère[/i] » un méta-caractère, tapé en faisant escape-[i]caractère[/i] sur les terminaux ne possédant pas de touche méta. La casse compte, mais les commandes qui sont liées à des lettres par défaut sont liées à la fois à des lettres minuscules et majuscules par commodité. [b]complete-word (tab)[/b] [table][row][col] [/col][col]Compléter un mot comme cela est décrit dans [b]Complètement[/b] et listage.[/col][/row][/table] [b]complete-word-back (non lié)[/b] [table][row][col] [/col][col]Comme [i]complete-word-fwd[/i], mais descend à partir de la fin de la liste.[/col][/row][/table] [b]complete-word-fwd (non lié)[/b] [table][row][col] [/col][col]Remplace le mot courant par le premier mot de la liste des complètements possibles. Peut être répété pour monter dans la liste. À la fin de la liste, bippe et revient au mot incomplet.[/col][/row][/table] [b]complete-word-raw (^X-tab)[/b] [table][row][col] [/col][col]Comme [i]complete-word[/i], mais ignore les complètements définis par l'utilisateur.[/col][/row][/table] [b]copy-prev-word (M-^_)[/b] [table][row][col] [/col][col]Copie le mot précédent de la ligne courante dans le tampon d'entrée. Voyez également [i]insert-last-word[/i].[/col][/row][/table] [b]dabbrev-expand (M-/)[/b] [table][row][col] [/col][col]Développe le mot courant vers le mot précédent le plus récent ayant le mot courant comme préfixe, en examinant toute la liste d'historique (une seule fois) si c'est nécessaire. La répétition de [i]dabbrev-expand[/i] sans aucune frappe entre-temps passe au mot précédent suivant etc., en ignorant les correspondances identiques, un peu comme le fait [i]history-search-backward[/i].[/col][/row][/table] [b]delete-char (non lié)[/b] [table][row][col] [/col][col]Efface le caractère situé sous le curseur. Voyez également [i]delete-char-or-list-or-eof[/i].[/col][/row][/table] [b]delete-char-or-eof (non lié)[/b] [table][row][col] [/col][col]Effectue un [i]delete-char[/i] s'il y a un caractère sous le curseur, ou [i]end-of-file[/i] sur une ligne vide. Voyez également [i]delete-char-or-list-or-eof[/i].[/col][/row][/table] [b]delete-char-or-list (non lié)[/b] [table][row][col] [/col][col]Effectue un [i]delete-char[/i] s'il y a un caractère sous le curseur, ou [i]list-choices[/i] à la fin de la ligne. Voyez également [i]delete-char-or-list-or-eof[/i].[/col][/row][/table] [b]delete-char-or-list-or-eof (^D)[/b] [table][row][col] [/col][col]Effectue un [i]delete-char[/i] s'il y a un caractère sous le curseur, [i]list-choices[/i] à la fin de la ligne, ou [i]end-of-file[/i] sur une ligne vide. Voyez également ces trois commandes, chacune d'entre elles n'effectuant qu'une seule action, et [i]delete-char-or-eof[/i], [i]delete-char-or-list[/i] ainsi que [i]list-or-eof[/i], chacune d'entre elles effectuant une combinaison de deux des trois commandes précitées.[/col][/row][/table] [b]down-history (flèche-bas, ^N)[/b] [table][row][col] [/col][col]Comme [i]up-history[/i], mais descend, en s'arrêtant à la ligne d'entrée originale.[/col][/row][/table] [b]end-of-file (non lié)[/b] [table][row][col] [/col][col]Signale une fin de fichier, forçant le shell à se terminer à moins que la variable shell [b]ignoreeof[/b] ne soit définie pour empêcher cela. Voyez également [i]delete-char-or-list-or-eof[/i].[/col][/row][/table] [b]expand-history (M-espace)[/b] [table][row][col] [/col][col]Développe les substitutions d'historique dans le mot courant. Voyez [b]Substitution[/b] d'historique. Voyez également [i]magic-space[/i], [i]toggle-literal-history[/i] et la variable shell [b]autoexpand[/b].[/col][/row][/table] [b]expand-glob (^X-*)[/b] [table][row][col] [/col][col]Développe le motif générique situé à la gauche du curseur. Voyez [b]Substitution[/b] des noms de fichiers.[/col][/row][/table] [b]expand-line (non lié)[/b] [table][row][col] [/col][col]Comme [i]expand-history[/i], mais développe les substitutions d'historique dans chaque mot du tampon d'entrée.[/col][/row][/table] [b]expand-variables (^X-$)[/b] [table][row][col] [/col][col]Développe la variable située à gauche du curseur. Voyez [b]Substitution[/b] de variables.[/col][/row][/table] [b]history-search-backward (M-p, M-P)[/b] [table][row][col] [/col][col]Effectue une recherche en arrière dans la liste d'historique pour trouver une commande débutant par le contenu courant du tampon d'entrée jusqu'au curseur et la copier dans le tampon d'entrée. La chaîne de caractères de recherche peut être un motif générique (voyez [b]Substitution[/b] des noms de fichiers) contenant « * », « ? », « [] » or « {} ». [i]up-history[/i] et [i]down-history[/i] procéderont à partir de l'emplacement approprié dans la liste d'historique. Mode Emacs uniquement. Voyez également [i]history-search-forward[/i] et [i]i-search-back[/i].[/col][/row][/table] [b]history-search-forward (M-n, M-N)[/b] [table][row][col] [/col][col]Comme [i]history-search-backward[/i], mais la recherche se fait en avant.[/col][/row][/table] [b]i-search-back (non lié)[/b] [table][row][col] [/col][col]Effectue une recherche en arrière comme [i]history-search-backward[/i], copie la première correspondance dans le tampon d'entrée avec le curseur positionné à la fin du motif, et affiche l'invite « bck: » et la première correspondance. Des caractères supplémentaires peuvent être tapés pour étendre la recherche, [i]i-search-back[/i] peut être tapé pour continuer la recherche avec le même motif, cyclant dans la liste d'historique si nécessaire ([i]i-search-back[/i] doit être lié à un unique caractère pour que cela fonctionne) ou bien l'un des caractères spéciaux suivants peut être tapé :[/col][/row][/table] [table][row][col] [/col][col][table][row][col] [/col][col] [table][row][col] [/col][col]^W Concatène le reste du mot sous le curseur au motif de recherche.[/col][/row][/table] [table][row][col] [/col][col]delete (ou n'importe quel caractère lié à [i]backward-delete-char[/i]) Annule l'effet du dernier caractère tapé et efface un caractère du motif de recherche si cela est approprié.[/col][/row][/table] [table][row][col] [/col][col]^G Si la recherche précédente a été couronnée de succès, abandonner la recherche. Sinon, revenir à la dernière recherche réussie.[/col][/row][/table] [table][row][col] [/col][col]escape Termine la recherche, en laissant la ligne courante dans le tampon d'entrée.[/col][/row][/table][/col][/row][/table] Tout autre caractère non lié à [i]self-insert-command[/i] termine la recherche, en laissant la ligne courante dans le tampon d'entrée, et est ensuite interprété comme une entrée normale. En particulier, un retour chariot entraînera l'exécution de la ligne courante. Mode Emacs uniquement. Voyez également [i]i-search-fwd[/i] et [i]history-search-backward[/i].[/col][/row][/table] [b]i-search-fwd (non lié)[/b] [table][row][col] [/col][col]Comme [i]i-search-back[/i], mais la recherche s'effectue en avant.[/col][/row][/table] [b]insert-last-word (M-_)[/b] [table][row][col] [/col][col]Insérer le dernier mot de la ligne d'entrée précédente (« !$ ») dans le tampon d'entrée. Voyez également [i]copy-prev-word[/i].[/col][/row][/table] [b]list-choices (M-^D)[/b] [table][row][col] [/col][col]Lister les possibilités de complètement comme décrit dans [b]Complètement[/b] et listage. Voyez également [i]delete-char-or-list-or-eof[/i] et [i]list-choices-raw[/i].[/col][/row][/table] [b]list-choices-raw (^X-^D)[/b] [table][row][col] [/col][col]Comme [i]list-choices[/i], mais ignore les complètements définis par l'utilisateur.[/col][/row][/table] [b]list-glob (^X-g, ^X-G)[/b] [table][row][col] [/col][col]Liste (via la commande intégrée [i]ls[/i]-F) les correspondances du motif générique (voyez [b]Substitution[/b] des noms de fichiers) situées à gauche du curseur.[/col][/row][/table] [b]list-or-eof (non lié)[/b] [table][row][col] [/col][col]Effectue un [i]list-choices[/i] ou un [i]end-of-file[/i] sur une ligne vide. Voyez également [i]delete-char-or-list-or-eof[/i].[/col][/row][/table] [b]magic-space (non lié)[/b] [table][row][col] [/col][col]Développe les substitutions d'historique sur la ligne courante, comme [i]expand-history[/i], et y concatène une espace. [i]magic-space[/i] est conçu pour être lié à la barre d'espacement, mais il n'est pas lié par défaut.[/col][/row][/table] [b]normalize-command (^X-?)[/b] [table][row][col] [/col][col]Recherche le mot courant dans le PATH et, s'il est trouvé, le remplace par le chemin complet menant à l'exécutable. Les caractères spéciaux sont protégés. Les alias sont développés et protégés mais les commandes à l'intérieur des alias ne le sont pas. Cette commande est utile avec les commandes qui prennent des commandes en tant qu'arguments, comme p.ex. « dbx » et « sh -x ».[/col][/row][/table] [b]normalize-path (^X-n, ^X-N)[/b] [table][row][col] [/col][col]Développe le mot courant comme décrit dans le réglage « expand » de la variable shell [b]symlinks[/b].[/col][/row][/table] [b]overwrite-mode (non lié)[/b] [table][row][col] [/col][col]Passer du mode d'entrée au mode d'écrasement et inversement.[/col][/row][/table] [b]run-fg-editor (M-^Z)[/b] [table][row][col] [/col][col]Sauvegarde la ligne d'entrée courante et recherche un travail stoppé de nom identique au dernier composant de la partie nom de fichier des variables d'environnement [b]EDITOR[/b] ou [b]VISUAL[/b] ou, si aucune d'entre elles n'est définie, « ed » ou « vi ». Si un tel travail est trouvé, il est redémarré comme si « fg %[i]job[/i] » avait été tapé. C'est utile pour passer facilement d'un éditeur au shell et inversement. Certaines personnes lient cette commande à « ^Z » afin de faire cela plus facilement.[/col][/row][/table] [b]run-help (M-h, M-H)[/b] [table][row][col] [/col][col]Recherche de la documentation sur la commande courante, en utilisant la même notion de « commande courante » que celle des routines de complètement, et l'affiche. Il n'est pas possible d'utiliser un paginateur ; [i]run-help[/i] est conçu pour les fichiers d'aide courts. Si l'alias spécial [b]helpcommand[/b] est défini, il est exécuté avec le nom de la commande pour unique argument. Sinon, la documentation doit se situer dans un fichier nommé [i]commande[/i].help, [i]commande[/i].1, [i]commande[/i].6, [i]commande[/i].8 ou [i]commande[/i], qui devrait se situer dans l'un des répertoires listés dans la variable d'environnement [b]HPATH[/b]. S'il y a plus d'un fichier d'aide, seul le premier est affiché.[/col][/row][/table] [b]self-insert-command (caractères texte)[/b] [table][row][col] [/col][col]Dans le mode d'insertion (le mode par défaut), insère le caractère tapé dans la ligne d'entrée après le caractère situé sous le curseur. Dans le mode d'écrasement, remplace le caractère situé sous le curseur par le caractère tapé. Le mode d'entrée est normalement préservé entre les lignes, mais la variable shell [b]inputmode[/b] peut être définie en « insert » (insertion) ou « overwrite » (écrasement) pour placer l'éditeur dans ce mode au début de chaque ligne. Voyez également [i]overwrite-mode[/i].[/col][/row][/table] [b]sequence-lead-in (préfixe flèche, préfixe méta, ^X)[/b] [table][row][col] [/col][col]Indique que les caractères suivants font partie d'une séquence de plusieurs touches. Lier une commande à une séquence de plusieurs touches crée en fait deux liaisons : le premier caractère à [i]sequence-lead-in[/i], et la séquence entière à la commande. Toutes les séquences débutant par un caractère lié à [i]sequence-lead-in[/i] sont en fait liées à [i]undefined-key[/i] à moins d'être liées à une autre commande.[/col][/row][/table] [b]spell-line (M-$)[/b] [table][row][col] [/col][col]Essaie de corriger l'orthographe de chaque mot du tampon d'entrée, comme [i]spell-word[/i], mais ignore les mots dont le premier caractère est « - », « ! », « ^ » ou encore « % », ou qui contient « », « * » ou « ? », pour éviter les problèmes avec les options, les substitutions et d'autres choses du même genre. Voyez [b]Correction[/b] orthographique.[/col][/row][/table] [b]spell-word (M-s, M-S)[/b] [table][row][col] [/col][col]Essaie de corriger l'orthographe du mot courant comme décrit dans [b]Correction[/b] orthographique. Vérifie tous les composants d'un mot qui semblent être des noms de chemins.[/col][/row][/table] [b]toggle-literal-history (M-r, M-R)[/b] [table][row][col] [/col][col]Développe ou « anti-développe » les substitutions d'historique dans le tampon d'entrée. Voyez également [i]expand-history[/i] et la variable shell [b]autoexpand[/b].[/col][/row][/table] [b]undefined-key (n'importe quelle touche non liée)[/b] [table][row][col] [/col][col]Bippe.[/col][/row][/table] [b]up-history (flèche-haut, ^P)[/b] [table][row][col] [/col][col]Copie l'entrée précédente de la liste d'historique dans le tampon d'entrée. Si [b]histlit[/b] est définie, utilise la forme littérale de l'entrée. Peut être répété pour parcourir la liste d'historique, en s'arrêtant au sommet.[/col][/row][/table] [b]vi-search-back (?)[/b] [table][row][col] [/col][col]Affiche l'invite « ? » et demande à l'utilisateur une chaîne de caractères de recherche (qui peut être un motif générique, comme pour [i]history-search-backward[/i]), la recherche et la copie dans le tampon d'entrée. Le haut-parleur bippe si aucune correspondance n'est trouvée. L'appui sur Entrée termine la recherche et laisse la dernière correspondance dans le tampon d'entrée. L'appui sur Escape termine la recherche et exécute la correspondance. Mode [i]vi[/i] uniquement.[/col][/row][/table] [b]vi-search-fwd (/)[/b] [table][row][col] [/col][col]Comme [i]vi-search-back[/i], mais recherche en avant.[/col][/row][/table] [b]which-command (M-?)[/b] [table][row][col] [/col][col]Effectue un [i]which[/i] (voyez la description de la commande intégrée) sur le premier mot du tampon d'entrée.[/col][/row][/table] [b]Structure lexicale[/b] Le shell découpe les lignes d'entrée en mots aux emplacements des blancs et des tabulations. Les caractères spéciaux « & », « | », « ; », « < », « > », « ( » et « ) » et les caractères dupliqués « && », « || », « << » et « >> » constituent toujours des mots séparés, qu'ils soient ou non entourés de caractères d'espacement. Quand l'entrée du shell n'est pas un terminal, le caractère « # » est utilisé pour débuter un commentaire. Chaque « # » et le reste de la ligne d'entrée sur laquelle il apparaît est éliminé avant tout examen ultérieur. On peut éviter la signification spéciale d'un caractère spécial (y compris un blanc ou une tabulation) pouvant faire partie d'un autre mot, en le faisant précéder par un backslash (« »), ou en l'enfermant dans des apostrophes (« ' »), des guillemets (« " ») ou des apostrophes inversées (« ` »). Quand il n'est pas protégé, un saut de ligne précédé par un « » est équivalent à un blanc mais, à l'intérieur de caractères de protection, cette séquence produit un saut de ligne. De plus, toutes les [b]Substitutions[/b] (voir en dessous) à l'exception de la [b]Substitution[/b] d'historique peuvent être évitées en enfermant les chaînes de caractères (ou des parties de chaînes) dans lesquelles elles apparaissent à l'intérieur d'apostrophes ou en protégeant le(s) caractère(s) crucial(aux) (c.-à-d. « $ » ou « ` » pour la [b]Substitution[/b] de variables ou la [b]Substitution[/b] de commandes respectivement) avec « ». (La [b]Substitution[/b] d'alias ne fait pas exception : protéger de quelque manière que ce soit un caractère quelconque d'un mot pour lequel un [i]alias[/i] a été défini empêche la substitution de l'alias. La manière habituelle de protéger un alias est de le faire précéder par un backslash.) La [b]Substitution[/b] d'historique est évitée par l'utilisation de backslashs, mais pas par celle de caractères de protection. Les chaînes de caractères protégées par des guillemets ou des apostrophes inversées (`) subissent la [b]Substitution[/b] de variables et la [b]Substitution[/b] de commandes, mais pas les autres substitutions. Le texte présent entre apostrophes ou guillemets devient un mot unique (ou en fait partie). Les métacaractères présents dans ces chaînes, y compris les blancs et les tabulations, ne forment pas des mots séparés. Une chaîne de caractères protégée par des guillemets ne peut que dans un seul cas (voir [b]Substitution[/b] de commandes ci-dessous) produire des parties de plus d'un mot ; les chaînes de caractères protégée par des apostrophes ne le font jamais. Les apostrophes inversées sont spéciales : elles signalent la [b]Substitution[/b] de commandes, qui peut résulter en plus d'un mot. La protection de chaînes de caractères complexes, en particulier celles qui contiennent elles-mêmes des caractères de protection, peut engendrer une certaine confusion. Souvenez-vous que les caractères de protection ne doivent pas être utilisés comme ils le sont dans l'écriture humaine ! Il peut être plus facile de ne pas protéger une chaîne de caractères entière, mais uniquement les parties de la chaîne qui en ont besoin, en utilisant différents types de protections si nécessaire. La variable shell [b]backslash_quote[/b] peut être utilisée pour que les backslashs protègent toujours « », « ' », et « " ». (+) Cela peut simplifier les tâches de protections complexes, mais peut engendrer des erreurs de syntaxe dans les scripts [i]csh[/i](1). [b]Substitutions[/b] Nous décrivons maintenant les diverses transformations que le shell effectue sur l'entrée dans l'ordre dans lequel elles se produisent. Nous notons au passage les structures de données impliquées, et les commandes et variables qui les affectent. Souvenez-vous que les substitutions peuvent être évitées en protégeant comme décrit dans [b]Structure[/b] lexicale. [b]Substitution dhistorique[/b] Chaque commande, ou « événement », entrée à partir du terminal, est sauvegardée dans la liste d'historique. La commande précédente est toujours sauvegardée, et la variable shell [b]history[/b] peut être réglée pour indiquer le nombre de commandes à sauvegarder. La variable shell [b]histdup[/b] peut être définie pour faire en sorte de ne pas sauvegarder d'événements dupliqués ou d'événements dupliqués consécutifs. Les commandes sauvegardées sont numérotées séquentiellement à partir de 1 et sont estampillées avec l'heure courante. Il n'est habituellement pas nécessaire d'utiliser les numéros d'événements, mais le numéro d'événement courant peut faire partie de l'invite en plaçant un « ! » dans la variable shell [b]prompt[/b]. Le shell sauvegarde en fait l'historique dans les formes développées et littérales (non développées). Si la variable shell [b]histlit[/b] est définie, les commandes qui affichent et stockent l'historique utilisent la forme littérale. La commande intégrée [i]history[/i] peut afficher, sauvegarder dans un fichier, restaurer et effacer la liste d'historique à n'importe quel moment, et les variables shell [b]savehist[/b] et [b]histfile[/b] peuvent être définies pour que la liste d'historique soit automatiquement sauvegardée à la déconnexion, et restaurée à la connexion. Les substitutions d'historique introduisent des mots de la liste d'historique dans le flux d'entrée, facilitant ainsi la répétition de commandes, la répétition d'arguments d'une commande précédente dans la commande courante, ou encore la correction orthographique d'erreurs dans la commande précédente avec un nombre limité de frappes et un grand degré de sécurité. Les substitutions d'historique commencent par le caractère « ! ». Elles peuvent commencer n'importe où dans le flux d'entrée, mais ne peuvent être imbriquées. Le « ! » peut être précédé d'un « » pour éviter sa signification spéciale ; par commodité, un « ! » est laissé inchangé quand il est suivi d'un blanc, d'une tabulation, d'un saut de ligne, d'un « = » ou d'un « ( ». Les substitutions d'historique se produisent également quand une ligne d'entrée débute par « ^ ». Cette abréviation spéciale sera décrite plus loin. Les caractères utilisés pour signaler la substitution d'historique (« ! » et « ^ ») peuvent être modifiés en définissant la variable shell [b]histchars[/b]. Toute ligne d'entrée contenant une substitution d'historique est affichée avant d'être exécutée. Une substitution d'historique peut comprendre une « spécification d'événement », qui indique l'événement à partir duquel les mots doivent être pris, un « désigneur de mot », qui sélectionne des mots particuliers de l'événement choisi, et/ou un « modificateur », qui manipule les mots sélectionnés. Une spécification d'événement peut être [table][row][col] [/col][col] [i]n[/i] [table][row][col] [/col][col]Un nombre se référant à un événement particulier.[/col][/row][/table] [table][row][col] [/col][col]-[i]n[/i] Un décalage se référant au [i]n[/i]-ième événement précédant l'événement courant[/col][/row][/table] [table][row][col] [/col][col]# L'événement courant. Cela devrait être utilisé avec précaution dans [i]csh[/i](1), car il n'y a pas de vérification de récursion. [i]tcsh[/i] admet 10 niveaux de récursion. (+)[/col][/row][/table] [table][row][col] [/col][col]! L'événement précédent (équivalent à « -1 »)[/col][/row][/table] [i]s[/i] [table][row][col] [/col][col]L'événement le plus récent dont le premier mot débute par la chaîne de caractères [i]s[/i][/col][/row][/table] [table][row][col] [/col][col]?[i]s[/i]? L'événement le plus récent contenant la chaîne [i]s[/i]. Le second « ? » peut être omis s'il est immédiatement suivi d'un saut de ligne.[/col][/row][/table][/col][/row][/table] Par exemple, considérez ce morceau d'historique : "" 4 [table][row][col] [/col][col] 9 8:30 nroff -man wumpus.man [b][/b] 10 8:31 cp wumpus.man wumpus.man.old [b][/b] 11 8:36 vi wumpus.man [b][/b] 12 8:37 diff wumpus.man.old wumpus.man[/col][/row][/table] Les commandes sont affichées avec leurs numéro d'événement et horodate. L'événement courant, que nous n'avons pas encore tapé, est l'événement numéro 13. « !11 » et « !-2 » se réfèrent à l'événement 11. « !! » se réfère à l'événement précédent, c.-à-d. 12. « !! » peut être abrégé en « ! » s'il est suivi d'un « : » (« : » est décrit plus bas). « !n » se réfère à l'événement 9, qui commence par « n ». « !?old? » se réfère également à l'événement 12, qui contient « old ». Sans les désigneurs ou les modificateurs de mots, les références d'historique se développent simplement en l'événement entier, de sorte que l'on peut taper « !cp » pour ré-exécuter la commande de copie, ou « !!|more » si la sortie de « diff » déborde de l'écran. Les références d'historique peuvent être isolées à partir du texte environnant par des accolades si nécessaire. Par exemple, « !vdoc » rechercherait une commande débutant par « vdoc » et, dans cet exemple, n'en trouverait pas, mais « !{v}doc » se développerait de façon non ambiguë en « vi wumpus.mandoc ». Les substitutions d'historique ne s'imbriquent pas, même à l'intérieur d'accolades. (+) Alors que [i]csh[/i](1) développe, par exemple, « !3d » en l'événement 3 avec la lettre « d » ajoutée à la fin, [i]tcsh[/i] le développe en le dernier événement débutant par « 3d » ; seuls les arguments entièrement numériques sont traités comme des numéros d'événements. Cela permet de rappeler des événements commençant par des nombres. Pour développer « !3d » comme dans [i]csh[/i](1), tapez « !3d ». Pour sélectionner des mots à partir d'un événement, nous pouvons faire suivre la spécification d'événement par un « : » et un désigneur pour les mots désirés. Les mots d'une ligne d'entrée sont numérotés à partir de 0, le premier mot (habituellement une commande) étant 0, le deuxième mot (le premier argument) étant 1, etc. Les désigneurs de mots de base sont : [table][row][col] [/col][col] [table][row][col] [/col][col]0 Le premier mot (la commande)[/col][/row][/table] [i]n[/i] [table][row][col] [/col][col]Le [i]n[/i]-ième argument[/col][/row][/table] [table][row][col] [/col][col]^ Le premier argument, équivalent à « 1 »[/col][/row][/table] [table][row][col] [/col][col]$ Le dernier argument[/col][/row][/table] [table][row][col] [/col][col]% Le mot correspondant à une recherche ?[i]s[/i]?[/col][/row][/table] [i]x-y[/i] [table][row][col] [/col][col]Un intervalle de mots[/col][/row][/table] [i]-y[/i] [table][row][col] [/col][col]Équivalent à « [i]0[/i]-y »[/col][/row][/table] [table][row][col] [/col][col]* Équivalent à « [i]^[/i]-$ », mais ne renvoie rien si l'événement ne contient qu'un seul mot[/col][/row][/table] [i]x*[/i] [table][row][col] [/col][col]Équivalent à « [i]x[/i]-$ »[/col][/row][/table] [i]x-[/i] [table][row][col] [/col][col]Équivalent à « [i]x*[/i] », mais omet le dernier mot (« $ »)[/col][/row][/table] [/col][/row][/table] Les mots sélectionnés sont insérés dans la ligne de commandes et sont séparés par des simples blancs. Par exemple, la commande « diff » de l'exemple précédent pourrait avoir été tapée comme ceci : « diff !!:1.old !!:1 » (en utilisant « :1 » pour sélectionner le premier argument de l'événement précédent), ou encore « diff !-2:2 !-2:1 » pour sélectionner et intervertir les arguments de la commande « cp ». Si nous ne nous préoccupons pas de l'ordre du « diff », nous pouvons faire « diff !-2:1-2 », ou simplement « diff !-2:* ». La commande « cp » pourrait avoir été tapée comme « cp wumpus.man !#:1.old », en utilisant « # » pour se référer à l'événement courant. « !n:- hurkle.man » réutiliserait les deux premiers mots de la commande « nroff » pour dire « nroff -man hurkle.man ». Le « : » séparant la spécification d'événement du désigneur de mot peut être omis si le sélecteur d'événement commence par « ^ », « $ », « * », « % » ou « - ». Par exemple, notre commande « diff » aurait pu être « diff !!^.old !!^ » ou, de façon équivalente, « diff !!$.old !!$ ». Néanmoins, si « !! » est abrégé en « ! », un sélecteur d'argument débutant par « - » sera interprété comme une spécification d'événement. Une référence d'historique peut posséder un désigneur de mot, mais pas de spécification d'événement. Elle référence ensuite la commande précédente. .ig " Pas vrai, mais on pensait que ça l'était pendant un long moment . " ..., à moins qu'une référence d'historique précédente ne se soit . " produite sur la même ligne, auquel cas cette forme répète la . " référence précédente. Donc « !?foo?^ !$ » fournit les premier . " et dernier arguments de la commande correspondant à « ?foo? ». .. Pour continuer avec notre exemple « diff », nous pourrions pu faire simplement « diff !^.old !^ » ou « diff !* » pour avoir les arguments dans l'ordre inverse. Le ou les mots d'une référence d'historique peuvent être édités, ou « modifiés », en les faisant suivre par un ou plusieurs modificateurs, chacun d'entre eux étant précédé par un « : »: [table][row][col] [/col][col] [table][row][col] [/col][col]h Supprimer un composant de nom de chemin de queue, en conservant la tête.[/col][/row][/table] [table][row][col] [/col][col]t Supprimer tous les composants de tête du nom de chemin, en conservant la queue.[/col][/row][/table] [table][row][col] [/col][col]r Supprimer l'extension du nom de fichier « .xxx », en conservant le nom racine.[/col][/row][/table] [table][row][col] [/col][col]e Supprimer tout sauf l'extension.[/col][/row][/table] [table][row][col] [/col][col]u Mettre en majuscule la première lettre minuscule.[/col][/row][/table] [table][row][col] [/col][col]l Mettre en minuscule la première lettre majuscule.[/col][/row][/table] [table][row][col] [/col][col]s[i]/l/r/[/i] Substituer [i]r[/i] à [i]l[/i]. [i]l[/i] est simplement une chaîne de caractères comme [i]r[/i], et pas une expression rationnelle du type de celles de la commande éponyme [i]ed[/i](1). N'importe quel caractère peut être utilisé comme délimiteur au lieu de « / » ; un « » peut être utilisé pour protéger le délimiteur à l'intérieur de [i]l[/i] et [i]r[/i]. Un caractère « & » dans [i]r[/i] est remplacé par [i]l[/i] ; « » protège également « & ». Si [i]l[/i] est vide (""), le [i]l[/i] d'une substitution précédente ou le [i]s[/i] d'une spécification d'événement précédente « ?[i]s[/i]? » sera utilisé. Le délimiteur de queue peut être omis s'il est immédiatement suivi d'un saut de ligne.[/col][/row][/table] [table][row][col] [/col][col]& Répéter la substitution précédente.[/col][/row][/table] [table][row][col] [/col][col]g Appliquer le modificateur suivant une fois sur chaque mot.[/col][/row][/table] [table][row][col] [/col][col]a (+) Appliquer le modificateur suivant autant de fois que possible sur un simple mot. « a » et « g » peuvent être utilisés simultanément pour appliquer un modificateur de façon globale. Dans l'implémentation actuelle, l'utilisation simultanée des modificateurs « a » et « s » peut mener à une boucle infinie. Par exemple, « :as/f/ff/ » ne se terminera jamais. Ce comportement pourrait changer dans le futur.[/col][/row][/table] [table][row][col] [/col][col]p Afficher la nouvelle ligne de commandes mais ne pas l'exécuter.[/col][/row][/table] [table][row][col] [/col][col]q Protéger les mots substitués, en empêchant ainsi de nouvelles substitutions.[/col][/row][/table] [table][row][col] [/col][col]x Comme q, mais couper en mots aux emplacement des blancs, tabulations et sauts de ligne.[/col][/row][/table] [/col][/row][/table] Les modificateurs ne sont appliqués qu'au premier mot modifiable (à moins que « g » ne soit utilisé). Le fait qu'aucun mot ne soit modifiable constitue une erreur. Par exemple, la commande « diff » pourrait avoir été écrite comme « diff wumpus.man.old !#^:r », en utilisant « :r » pour supprimer « .old » du premier argument situé sur la même ligne (« !#^ »). Nous pourrions faire « echo hello out there », ensuite « echo !*:u » pour mettre « hello » en majuscule, « echo !*:au » pour le dire bruyamment, ou « echo !*:agu » pour réellement crier. Nous pourrions faire suivre « mail -s "J'ai oublié mon mot de passe" rot » par « !:s/rot/root » pour corriger l'orthographe de « root » (voyez [b]Correction[/b] orthographique pour une approche différente). Il y a une abréviation spéciale pour les substitutions. Quand « ^ » est le premier caractère d'une ligne d'entrée, il est équivalent à « !:s^ ». Donc, on aurait pu dire « ^rot^root » pour effectuer une correction orthographique sur l'exemple précédent. C'est la seule substitution d'historique qui ne commence pas explicitement par « ! ». (+) Dans [i]csh[/i], un seul modificateur peut être appliqué à chaque développement d'historique ou de variable. Dans [i]tcsh[/i], on peut en utiliser plusieurs, comme par exemple "" 4 [table][row][col] [/col][col]% mv wumpus.man /usr/man/man1/wumpus.1 [b][/b] % man !$:t:r [b][/b] man wumpus[/col][/row][/table] Dans [i]csh[/i], le résultat sera « wumpus.1:r ». Une substitution suivie d'un « : » pourrait devoir en être isolée avec des accolades : "" 4 [table][row][col] [/col][col]> mv a.out /usr/games/wumpus [b][/b] > setenv PATH !$:h:$PATH [b][/b] Mauvais modificateur ! : $. [b][/b] > setenv PATH !{-2$:h}:$PATH [b][/b] setenv PATH /usr/games:/bin:/usr/bin:.[/col][/row][/table] La première tentative fonctionnera avec [i]csh[/i] mais échouera avec [i]tcsh[/i], car [i]tcsh[/i] s'attend à un modificateur différent de « $ » après le deuxième « : ». Finalement, l'historique peut être accédé via l'éditeur ainsi qu'avec les substitutions que l'on vient de décrire. Les commandes d'éditeur [i]up-[/i] et [i]down-history[/i], [i]history-search-backward[/i] et [i]-forward[/i], [i]i-search-back[/i] et [i]-fwd[/i], [i]vi-search-back[/i] et [i]-fwd[/i], [i]copy-prev-word[/i] et [i]insert-last-word[/i] recherchent des événements dans la liste d'historique et les copient dans le tampon d'entrée. La commande d'éditeur [i]toggle-literal-history[/i] bascule entre les formes développées et littérales des lignes d'historique dans le tampon d'entrée. [i]expand-history[/i] et [i]expand-line[/i] développent les substitutions d'historique dans le mot courant et dans le tampon d'entrée entier respectivement. [b]Substitution dalias[/b] Le shell maintient une liste d'alias qui peuvent être définis, in-définis et affichés par les commandes [i]alias[/i] et [i]unalias[/i]. Après qu'une ligne de commandes ait été découpée en commandes uniques (voyez [b]Commandes[/b]), le premier mot de chaque commande est examiné de gauche à droite pour voir s'il comprend un alias. Si c'est le cas, le premier mot est remplacé par l'alias. Si l'alias contient une référence d'historique, il subit la [b]Substitution[/b] d'historique comme si la commande originale était la ligne d'entrée précédente. Si l'alias ne contient pas de référence d'historique, la liste des arguments n'est pas modifiée. Par conséquent, si l'alias pour « ls » est « ls -l », la commande « ls /usr » devient « ls -l /usr », la liste des arguments n'étant pas modifiée. Si l'alias pour « lookup » est « grep !^ /etc/passwd », alors « lookup bill » devient « grep bill /etc/passwd ». Les alias peuvent être utilisés pour introduire une métasyntaxe d'analyseur syntaxique. Par exemple, « alias print 'pr e!* | lpr » définit une « commande » (« print ») qui envoie ses arguments à l'imprimante via [i]pr[/i](1). La substitution d'alias est répétée jusqu'à ce que le premier mot de la commande ne possède plus d'alias. Si une substitution d'alias ne modifie pas le premier mot (comme dans l'exemple précédent), elle est marquée pour éviter un bouclage. Les autres boucles sont détectées et causent une erreur. Certains alias sont référencés par le shell ; voyez [b]Alias[/b] spéciaux. [b]Substitution de variables[/b] Le shell maintient une liste de variables, chacune d'entre elles ayant pour valeur une liste de mots (éventuellement vide). La valeur des variables shell peut être affichée et modifiée en utilisant les commandes [i]set[/i] et [i]unset[/i]. Le système maintient sa propre liste de variables d'« environnement ». Celles-ci peuvent être affichées et modifiées en utilisant [i]printenv[/i], [i]setenv[/i] et [i]unsetenv[/i]. (+) Les variables peuvent être rendues accessibles en lecture uniquement en utilisant « set -r ». Les variables accessibles en lecture seule ne peuvent être ni modifiées, ni in-définies ; si on essaie de le faire, cela causera une erreur. Une fois accessible en lecture seule, une variable ne peut plus être rendue accessible en écriture, et « set -r » ne devrait donc être utilisé qu'avec prudence. Les variables d'environnement ne peuvent pas être rendues accessibles en lecture seule. Certaines variables sont définies par le shell ou sont référencées par lui. Par exemple, la variable [b]argv[/b] est une image de la liste des arguments du shell, et les mots de cette valeur de variable sont référencés d'une façon spéciale. Certaines des variables référencées par le shell sont des interrupteurs ; le shell ne se soucie pas de leur valeur, mais uniquement du fait de savoir s'ils sont sélectionnés ou non. Par exemple, la variable [b]verbose[/b] est un interrupteur qui renvoie les commandes d'entrée en écho. L'option de ligne de commandes [b][/b]-v définit cette variable. [b]Variables[/b] shell spéciales liste toutes les variables qui sont référencées par le shell. Les autres opérations traitent les variables de façon numérique. La commande « @ » permet d'effectuer des calculs numériques, et d'affecter leur résultat à une variable. Les valeurs de variables sont néanmoins toujours représentées par zéro ou plusieurs chaînes de caractères. Lors des opérations numériques, la chaîne de caractères vide est considérée valoir zéro, et les n-ièmes mots (n>=2) des valeurs à plusieurs mots sont ignorés. Après que la ligne d'entrée ait subi la substitution des alias et ait été analysée, et avant que chaque commande ne soit exécutée, la substitution des variables est effectuée en entrant des caractères « $ ». Ce développement peut être évité en faisant précéder le « $ » par un « e », sauf dans des « " » où elle se produit [i]toujours[/i], et dans des « ' » où elle ne se produit [i]jamais[/i]. Les chaînes de caractères protégées par des « ` » sont interprétées ultérieurement (voyez [b]Substitution[/b] de commandes plus bas) de sorte que la substitution de « $ » ne s'y produit pas encore, si jamais elle se produit. Un « $ » est passé sans être modifié s'il est suivi par un blanc, une tabulation, ou un fin-de-ligne (eol). Les redirections d'entrée/sortie sont reconnues avant le développement des variables, et subissent le développement des variables séparément. Autrement, le nom de la commande et la liste d'arguments entière sont développés ensemble. Il est ainsi possible que le premier mot (la commande) (à cet instant) génère plus d'un mot, le premier d'entre eux devenant le nom de la commande, et les autres devenant des arguments. À moins d'être encadré
Fichier
Forum
-
Derniers messages
Bavardages
Aujourd'hui, je rénove ou je construis ^^
Software
problème sur windows 10
Réseaux et Télécom
Administrateur Réseau - Cisco
Réseaux et Télécom
Problème wifi (POE)
Software
Postfix - Need help
Bavardages
Oh râge oh désespoir !
Programmation
Enregistrement client et envoi mail
Software
SÉCURITÉ MACBOOK
Hardware
conseil matos réseau?
Hardware
nVidia Shield Android TV
Actualités
-
Archives
Matériel
Nvidia prévient d'une pénurie de GPU ce trimestre, avec une reprise début 2025
Les Technos
Les Technos #469 : Un jour sans fin
Jeux Vidéos
Test Farming Simulator 25 (PS5) - Des innovations intéressantes mais des performances à revoir
Matériel
Qualcomm souhaite réduire davantage les prix des PC Windows basés sur ARM
Tablettes
Finalement, Google préparerait une nouvelle tablette mais la Pixel Tablet 2 serait abandonnée
Ada
CSS
Cobol
CPP
HTML
Fortran
Java
JavaScript
Pascal
Perl
PHP
Python
SQL
VB
XML
Anon URL
DailyMotion
eBay
Flickr
FLV
Google Video
Google Maps
Metacafe
MP3
SeeqPod
Veoh
Yahoo Video
YouTube
6px
8px
10px
12px
14px
16px
18px
Informaticien.be
- © 2002-2024
Akretio
SPRL - Generated via
Kelare
The Akretio Network:
Akretio
-
Freedelity
-
KelCommerce
-
Votre publicité sur informaticien.be ?