Scroll to navigation

TCSH(1) Manuel de l'utilisateur Linux TCSH(1)

NOM

tcsh - Shell C avec complètement des noms de fichiers et édition de lignes de commandes

SYNOPSIS

tcsh [-bcdefFimnqstvVxX] [-Dnom[=valeur]] [arg ...]
tcsh -l

DESCRIPTION

tcsh est une version améliorée mais complètement compatible du shell C du UNIX de Berkeley, csh(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 L'éditeur de ligne de commandes), un complètement des mots programmable (voyez Complètement et listage), une correction orthographique (voyez Correction orthographique), un mécanisme d'historique (voyez Substitution d'historique), un contrôle des travaux (voyez Travaux) et une syntaxe semblable à celle du C. La section NOUVELLES FONCTIONNALITÉS décrit les améliorations majeures de tcsh par rapport à csh(1). Tout au long de ce manuel, les fonctionnalités de tcsh qu'on ne trouve pas dans la plupart des implémentations de csh (spécifiquement le csh de BSD4.4) sont marquées par un « (+) », et les fonctionnalités qui sont présentes dans csh(1) mais qui ne sont généralement pas documentées sont marquées par un « (u) ».

Traitement de la liste d'arguments

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 -l pour seul argument.

Les autres arguments options sont interprétés comme suit :

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.
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 command pour pouvoir être référencées, et exécutées. Tous les arguments restants sont placés dans la variable shell argv.
Le shell charge la pile de répertoires à partir de ~/.cshdirs comme décrit dans Démarrage et arrêt, que ce soit un shell de connexion ou non. (+)
-Dnom[=valeur]
Fournit une valeur à la variable d'environnement nom. (Domain/OS uniquement) (+)
Le shell se termine si une des commandes invoquées se termine anormalement ou produit une valeur de retour non nulle.
Le shell ignore ~/.tcshrc, et démarre ainsi plus rapidement.
Le shell utilise fork(2) au lieu de vfork(2) pour créer des processus. (Convex/OS uniquement) (+)
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.
Le shell est un shell de connexion. Applicable uniquement si -l est la seule option spécifiée.
Le shell charge ~/.tcshrc même s'il n'appartient pas à l'utilisateur effectif. Des versions plus récentes de su(1) peuvent passer -m au shell. (+)
Le shell analyse les commandes mais ne les exécute pas. Cela aide au débogage des scripts shell.
Le shell accepte SIGQUIT (voyez Traitement des signaux) et agit quand il est utilisé sous un débogueur. Le contrôle des travaux est désactivé. (u)
Les commandes d'entrée sont lues à partir de l'entrée standard.
Le shell lit et exécute une ligne d'entrée. Un « \ » peut être utilisé pour protéger le saut de ligne (« \n ») et continuer sur une autre ligne.
Définit la variable shell verbose, afin que l'entrée de la commande soit renvoyée en écho après la substitution d'historique.
Définit la variable shell echo, afin que les commandes soient renvoyées en écho juste avant leur exécution.
Définit la variable shell verbose avant même d'exécuter ~/.tcshrc.
Est à -x ce que -V est à -v.

Après le traitement des arguments options, s'il reste des arguments mais qu'aucune des options -c, -i, -s ou -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 argv.

Démarrage et arrêt

Un shell de connexion démarre en exécutant les commandes des fichiers système /etc/csh.cshrc et /etc/csh.login. Il exécute ensuite les commandes des fichiers situés dans le répertoire personnel (home) de l'utilisateur : d'abord ~/.tcshrc (+) ou, s'il n'est pas trouvé, ~/.cshrc ; ensuite ~/.history (ou la valeur de la variable shell histfile) ; puis ~/.login ; et finalement ~/.cshdirs (ou la valeur de la variable shell dirsfile) (+). Le shell peut lire /etc/csh.login avant plutôt qu'après /etc/csh.cshrc, et ~/.login avant plutôt qu'après ~/.tcshrc ou ~/.cshrc et ~/.history, s'il est compilé ainsi ; voyez la variable shell version. (+)

Les shells non de connexion ne lisent que /etc/csh.cshrc et ~/.tcshrc ou ~/.cshrc au démarrage.

Pour des exemples de fichiers de démarrage, veuillez consulter http://tcshrc.sourceforge.net.

Les commandes comme stty(1) et tset(1), qui ne doivent être exécutées qu'une fois par connexion, sont habituellement situées dans un des fichiers ~/.login. Les utilisateurs qui doivent utiliser le même jeu de fichiers pour csh(1) et tcsh peuvent n'avoir qu'un seul ~/.cshrc qui vérifie l'existence de la variable shell tcsh avant d'utiliser des commandes spécifiques à tcsh, ou peuvent avoir à la fois un ~/.cshrc et un ~/.tcshrc qui emploient comme source (voyez la commande intégrée) le fichier ~/.cshrc. Le reste de ce manuel utilisera « ~/.tcshrc » pour vouloir dire « ~/.tcshrc » ou, si ~/.tcshrc n'est pas trouvé, « ~/.cshrc ».

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 autologout). Quand un shell de connexion se termine, il donne la valeur appropriée (« normal » ou « automatic ») à la variable shell logout, et exécute ensuite les commandes des fichiers /etc/csh.logout et ~/.logout. Le shell peut ignorer le DTR à la déconnexion si cela est compilé ; voyez la variable shell version.

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 csh(1) ; voyez FICHIERS.

Édition

Nous décrivons d'abord L'éditeur de ligne de commandes. Les sections Complètement et listage et Correction 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 Commandes de l'éditeur liste et décrit les commandes d'éditeur spécifiques au shell et leurs liaisons par défaut.

L'éditeur de ligne de commandes (+)

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 vi(1). L'éditeur n'est actif que lorsque la variable shell edit est définie, ce qui est le cas par défaut dans les shells interactifs. La commande intégrée bindkey 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 version), mais bindkey peut modifier les liaisons de touches pour utiliser un style vi.

Le shell associe toujours les touches fléchées (comme définies dans la variable d'environnement TERMCAP) à

down-history
up-history
backward-char
forward-char

à 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 settc 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'emacs(1) et de vi(1) s'attendent et peuvent facilement être affichées par bindkey, de sorte qu'il n'est pas nécessaire de les lister ici. De même, bindkey 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 wordchars, 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 Structure Lexicale.

Complètement et listage (+)

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 complete-word (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 addsuffix 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 emacs 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 path, 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 delete-char-or-list-or-eof. Le shell liste les complètements possibles en utilisant la commande intégrée ls-F et réaffiche l'invite et la ligne de commandes non terminée, par exemple :

> ls /usr/l[^D]
lbin/ lib/ local/ lost+found/
> ls /usr/l

Si la variable shell autolist est définie, le shell liste les choix restants (s'il y en a) à chaque fois que le complètement échoue :

> set autolist
> nm /usr/lib/libt[tab]
libtermcap.a@ libtermlib.a@
> nm /usr/lib/libterm

Si autolist 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 Substitution des noms de fichiers), et des entrées de la pile de répertoires abrégées avec « = » (voyez Substitution de pile de répertoires). Par exemple,

> ls ~k[^D]
kahn kas kellogg
> ls ~ke[tab]
> ls ~kellogg/

ou

> set local = /usr/local
> ls $lo[tab]
> ls $local/[^D]
bin/ etc/ lib/ man/ src/
> ls $local/

Notez que les variables peuvent également être développées explicitement via la commande d'éditeur expand-variables.

delete-char-or-list-or-eof 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 ignoreeof est définie, ne fait rien. « M-^D », lié à la commande d'éditeur list-choices, liste les complètements possibles n'importe où sur une ligne, et list-choices (ou n'importe laquelle des commandes d'éditeur apparentées qui effacent ou non, listent et/ou déconnectent, qui sont listées sous delete-char-or-list-or-eof), peut être liée à « ^D » avec la commande intégrée bindkey si vous le souhaitez.

Les commandes d'éditeur complete-word-fwd et complete-word-back (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 fignore peut être définie en tant que liste de suffixes à ignorer lors du complètement. Considérez le cas suivant :

> ls
Makefile condiments.h~ main.o side.c
README main.c meal side.o
condiments.h main.c~
> set fignore = (.o \~)
> emacs ma[^D]
main.c main.c~ main.o
> emacs ma[tab]
> emacs main.c

« 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 fignore. Notez qu'un « \ » est nécessaire devant « ~ » pour éviter qu'il ne soit développé en home comme décrit dans Substitution des noms de fichiers. fignore est ignoré si un seul complètement est possible.

Si la variable shell complete 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

comp.lang.c comp.lang.perl comp.std.c++
comp.lang.c++ comp.std.c

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

A_silly_file a-hyphenated-file another_silly_file

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 : recexact 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 :

> ls
fodder foo food foonly
> set recexact
> rm fo[tab]

émet juste un bip, car « fo » peut être développé en « fod » ou « foo », mais si nous tapons un autre « o »,

> rm foo[tab]
> rm foo,

le complètement se fait vers « foo », même si « food » et « foonly » correspondent également. autoexpand peut être définie pour lancer la commande d'éditeur expand-history avant chaque tentative de complètement, autocorrect peut être définie pour corriger l'orthographe du mot à compléter (voyez Correction orthographique) avant chaque tentative de complètement et correct peut être définie pour compléter les commandes automatiquement après que l'on ait tapé sur « entrée ». matchbeep peut être définie pour faire en sorte que le complètement bippe ou pas dans un certain nombre de situations, et nobeep peut être définie pour ne jamais bipper. nostat 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 stat(2) sur ces répertoires. listmax et listmaxrows 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. recognize_only_executables 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 complete 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 Substitution des noms de fichiers), mais les commandes d'éditeur list-glob et expand-glob accomplissent des fonctions équivalentes pour les motifs génériques.

Correction orthographique (+)

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 spell-word (habituellement liée à M-s et M-S) et le tampon d'entrée entier avec spell-line (liée habituellement à M-$). La variable shell correct 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 autocorrect 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 :

> set correct = cmd
> lz /usr/bin
CORRECT>ls /usr/bin (y|n|e|a)?

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 complete). 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.

Commandes de l'éditeur (+)

« 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 emacs(1) et vi(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. « ^caractère » signifie un caractère de contrôle et « M-caractère » un méta-caractère, tapé en faisant escape-caractère 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é.

Compléter un mot comme cela est décrit dans Complètement et listage.
Comme complete-word-fwd, mais descend à partir de la fin de la liste.
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.
Comme complete-word, mais ignore les complètements définis par l'utilisateur.
Copie le mot précédent de la ligne courante dans le tampon d'entrée. Voyez également insert-last-word.
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 dabbrev-expand sans aucune frappe entre-temps passe au mot précédent suivant etc., en ignorant les correspondances identiques, un peu comme le fait history-search-backward.
Efface le caractère situé sous le curseur. Voyez également delete-char-or-list-or-eof.
Effectue un delete-char s'il y a un caractère sous le curseur, ou end-of-file sur une ligne vide. Voyez également delete-char-or-list-or-eof.
Effectue un delete-char s'il y a un caractère sous le curseur, ou list-choices à la fin de la ligne. Voyez également delete-char-or-list-or-eof.
Effectue un delete-char s'il y a un caractère sous le curseur, list-choices à la fin de la ligne, ou end-of-file sur une ligne vide. Voyez également ces trois commandes, chacune d'entre elles n'effectuant qu'une seule action, et delete-char-or-eof, delete-char-or-list ainsi que list-or-eof, chacune d'entre elles effectuant une combinaison de deux des trois commandes précitées.
Comme up-history, mais descend, en s'arrêtant à la ligne d'entrée originale.
Signale une fin de fichier, forçant le shell à se terminer à moins que la variable shell ignoreeof ne soit définie pour empêcher cela. Voyez également delete-char-or-list-or-eof.
Développe les substitutions d'historique dans le mot courant. Voyez Substitution d'historique. Voyez également magic-space, toggle-literal-history et la variable shell autoexpand.
Développe le motif générique situé à la gauche du curseur. Voyez Substitution des noms de fichiers.
Comme expand-history, mais développe les substitutions d'historique dans chaque mot du tampon d'entrée.
Développe la variable située à gauche du curseur. Voyez Substitution de variables.
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 Substitution des noms de fichiers) contenant « * », « ? », « [] » or « {} ». up-history et down-history procéderont à partir de l'emplacement approprié dans la liste d'historique. Mode Emacs uniquement. Voyez également history-search-forward et i-search-back.
Comme history-search-backward, mais la recherche se fait en avant.
Effectue une recherche en arrière comme history-search-backward, 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-search-back peut être tapé pour continuer la recherche avec le même motif, cyclant dans la liste d'historique si nécessaire (i-search-back doit être lié à un unique caractère pour que cela fonctionne) ou bien l'un des caractères spéciaux suivants peut être tapé :

^W
Concatène le reste du mot sous le curseur au motif de recherche.
(ou n'importe quel caractère lié à backward-delete-char) Annule l'effet du dernier caractère tapé et efface un caractère du motif de recherche si cela est approprié.
^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.
Termine la recherche, en laissant la ligne courante dans le tampon d'entrée.

Tout autre caractère non lié à self-insert-command 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-search-fwd et history-search-backward.

Comme i-search-back, mais la recherche s'effectue en avant.
Insérer le dernier mot de la ligne d'entrée précédente (« !$ ») dans le tampon d'entrée. Voyez également copy-prev-word.
Lister les possibilités de complètement comme décrit dans Complètement et listage. Voyez également delete-char-or-list-or-eof et list-choices-raw.
Comme list-choices, mais ignore les complètements définis par l'utilisateur.
Liste (via la commande intégrée ls-F) les correspondances du motif générique (voyez Substitution des noms de fichiers) situées à gauche du curseur.
Effectue un list-choices ou un end-of-file sur une ligne vide. Voyez également delete-char-or-list-or-eof.
Développe les substitutions d'historique sur la ligne courante, comme expand-history, et y concatène une espace. magic-space est conçu pour être lié à la barre d'espacement, mais il n'est pas lié par défaut.
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 ».
Développe le mot courant comme décrit dans le réglage « expand » de la variable shell symlinks.
Passer du mode d'entrée au mode d'écrasement et inversement.
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 EDITOR ou VISUAL 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 %job » 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.
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 ; run-help est conçu pour les fichiers d'aide courts. Si l'alias spécial helpcommand 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é commande.help, commande.1, commande.6, commande.8 ou commande, qui devrait se situer dans l'un des répertoires listés dans la variable d'environnement HPATH. S'il y a plus d'un fichier d'aide, seul le premier est affiché.
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 inputmode 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 overwrite-mode.
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 à sequence-lead-in, et la séquence entière à la commande. Toutes les séquences débutant par un caractère lié à sequence-lead-in sont en fait liées à undefined-key à moins d'être liées à une autre commande.
Essaie de corriger l'orthographe de chaque mot du tampon d'entrée, comme spell-word, 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 Correction orthographique.
Essaie de corriger l'orthographe du mot courant comme décrit dans Correction orthographique. Vérifie tous les composants d'un mot qui semblent être des noms de chemins.
Développe ou « anti-développe » les substitutions d'historique dans le tampon d'entrée. Voyez également expand-history et la variable shell autoexpand.
Bippe.
Copie l'entrée précédente de la liste d'historique dans le tampon d'entrée. Si histlit 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.
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 history-search-backward), 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 vi uniquement.
Comme vi-search-back, mais recherche en avant.
Effectue un which (voyez la description de la commande intégrée) sur le premier mot du tampon d'entrée.

Structure lexicale

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 Substitutions (voir en dessous) à l'exception de la Substitution 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 Substitution de variables ou la Substitution de commandes respectivement) avec « \ ». (La Substitution 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 alias 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 Substitution 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 Substitution de variables et la Substitution 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 Substitution 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 Substitution 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 backslash_quote 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 csh(1).

Substitutions

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 Structure lexicale.

Substitution d'historique

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 history peut être réglée pour indiquer le nombre de commandes à sauvegarder. La variable shell histdup 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 prompt.

Le shell sauvegarde en fait l'historique dans les formes développées et littérales (non développées). Si la variable shell histlit est définie, les commandes qui affichent et stockent l'historique utilisent la forme littérale.

La commande intégrée history peut afficher, sauvegarder dans un fichier, restaurer et effacer la liste d'historique à n'importe quel moment, et les variables shell savehist et histfile 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 histchars. 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

Un nombre se référant à un événement particulier.
-n
Un décalage se référant au n-ième événement précédant l'événement courant
#
L'événement courant. Cela devrait être utilisé avec précaution dans csh(1), car il n'y a pas de vérification de récursion. tcsh admet 10 niveaux de récursion. (+)
!
L'événement précédent (équivalent à « -1 »)
L'événement le plus récent dont le premier mot débute par la chaîne de caractères s
?s?
L'événement le plus récent contenant la chaîne s. Le second « ? » peut être omis s'il est immédiatement suivi d'un saut de ligne.

Par exemple, considérez ce morceau d'historique :

 9 8:30 nroff -man wumpus.man
10 8:31 cp wumpus.man wumpus.man.old
11 8:36 vi wumpus.man
12 8:37 diff wumpus.man.old wumpus.man

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 csh(1) développe, par exemple, « !3d » en l'événement 3 avec la lettre « d » ajoutée à la fin, tcsh 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 csh(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 :

0
Le premier mot (la commande)
Le n-ième argument
^
Le premier argument, équivalent à « 1 »
$
Le dernier argument
%
Le mot correspondant à une recherche ?s?
x-y
Un intervalle de mots
Équivalent à « 0-y »
*
Équivalent à « ^-$ », mais ne renvoie rien si l'événement ne contient qu'un seul mot
Équivalent à « x-$ »
x-
Équivalent à « x* », mais omet le dernier mot (« $ »)

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. 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 « : »:

Supprimer un composant de nom de chemin de queue, en conservant la tête.
Supprimer tous les composants de tête du nom de chemin, en conservant la queue.
Supprimer l'extension du nom de fichier « .xxx », en conservant le nom racine.
Supprimer tout sauf l'extension.
Mettre en majuscule la première lettre minuscule.
Mettre en minuscule la première lettre majuscule.
s/l/r/
Substituer r à l. l est simplement une chaîne de caractères comme r, et pas une expression rationnelle du type de celles de la commande éponyme ed(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 l et r. Un caractère « & » dans r est remplacé par l ; « \ » protège également « & ». Si l est vide (""), le l d'une substitution précédente ou le s d'une spécification d'événement précédente « ?s? » sera utilisé. Le délimiteur de queue peut être omis s'il est immédiatement suivi d'un saut de ligne.
&
Répéter la substitution précédente.
Appliquer le modificateur suivant une fois sur chaque mot.
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.
Afficher la nouvelle ligne de commandes mais ne pas l'exécuter.
Protéger les mots substitués, en empêchant ainsi de nouvelles substitutions.
Comme q, mais couper en mots aux emplacement des blancs, tabulations et sauts de ligne.

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 Correction 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 csh, un seul modificateur peut être appliqué à chaque développement d'historique ou de variable. Dans tcsh, on peut en utiliser plusieurs, comme par exemple

% mv wumpus.man /usr/man/man1/wumpus.1
% man !$:t:r
man wumpus

Dans csh, le résultat sera « wumpus.1:r ». Une substitution suivie d'un « : » pourrait devoir en être isolée avec des accolades :

> mv a.out /usr/games/wumpus
> setenv PATH !$:h:$PATH
Mauvais modificateur ! : $.
> setenv PATH !{-2$:h}:$PATH
setenv PATH /usr/games:/bin:/usr/bin:.

La première tentative fonctionnera avec csh mais échouera avec tcsh, car tcsh 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 up- et down-history, history-search-backward et -forward, i-search-back et -fwd, vi-search-back et -fwd, copy-prev-word et insert-last-word recherchent des événements dans la liste d'historique et les copient dans le tampon d'entrée. La commande d'éditeur toggle-literal-history bascule entre les formes développées et littérales des lignes d'historique dans le tampon d'entrée. expand-history et expand-line développent les substitutions d'historique dans le mot courant et dans le tampon d'entrée entier respectivement.

Substitution d'alias

Le shell maintient une liste d'alias qui peuvent être définis, in-définis et affichés par les commandes alias et unalias. Après qu'une ligne de commandes ait été découpée en commandes uniques (voyez Commandes), 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 Substitution 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 \!* | lpr » définit une « commande » (« print ») qui envoie ses arguments à l'imprimante via pr(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 Alias spéciaux.

Substitution de variables

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 set et unset. Le système maintient sa propre liste de variables d'« environnement ». Celles-ci peuvent être affichées et modifiées en utilisant printenv, setenv et unsetenv.

(+) 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 argv 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 verbose est un interrupteur qui renvoie les commandes d'entrée en écho. L'option de ligne de commandes -v définit cette variable. Variables 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 « \ », sauf dans des « " » où elle se produit toujours, et dans des « ' » où elle ne se produit jamais. Les chaînes de caractères protégées par des « ` » sont interprétées ultérieurement (voyez Substitution 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é dans des « " », ou d'avoir fourni le modificateur « :q », les résultats d'une substitution de variables peuvent éventuellement subir la substitution de commandes et de noms de fichier. À l'intérieur de « " », une variable dont la valeur est constituée de plusieurs mots se développe en un (une partie d'un) mot unique, les mots faisant partie de la valeur de la variable étant séparés par des blancs. Quand le modificateur « :q » est appliqué à une substitution, la variable sera développée en plusieurs mots séparés par des blancs et protégés pour éviter des substitutions ultérieures de commandes ou de noms de fichiers.

Les méta-séquences suivantes sont fournies pour introduire des valeurs de variables dans l'entrée du shell. À moins que cela ne soit précisé, référencer une variable non définie constitue une erreur.

$nom

${nom}
Substitue les mots de la valeur de la variable nom, ceux-ci étant séparés par un blanc. Des accolades isolent nom des caractères suivants qui en feraient autrement partie. Le nom des variables shell peut contenir jusqu'à 20 lettres ou chiffres, et doit débuter par une lettre. Le caractère de soulignement (« _ ») est considéré être une lettre. Si nom n'est pas une variable shell, mais est défini dans l'environnement, alors cette valeur est renvoyée (mais les modificateurs « : » et les autres formes fournies en dessous ne sont pas disponibles dans ce cas).

$nom[sélecteur]

${nom[sélecteur]}
Ne substitue que les mots sélectionnés à partir de la valeur de nom. Le sélecteur subit la substitution du « $ » et peut être composé d'un ou de deux nombres séparés par un « - ». Le premier mot d'une valeur de variable est numéroté « 1 ». Si le premier nombre d'un intervalle est omis, sa valeur par défaut est « 1 ». Si le dernier membre d'un intervalle est omis, sa valeur par défaut est « $#nom ». Le sélecteur « * » sélectionne tous les mots. La vacuité d'un intervalle ne constitue pas une erreur si le second argument est omis ou fait partie de l'intervalle.
$0
Substitue le nom du fichier à partir duquel l'entrée de commande est lue. Une erreur se produit si le nom n'est pas connu.

$nombre

${nombre}
Équivalent à « $argv[nombre] ».
$*
Équivalent à « $argv », qui est équivalent à « $argv[*] ».

Les modificateurs « : » décrits dans Substitution d'historique, sauf « :p », peuvent être appliqués aux substitutions ci-dessus. Plusieurs d'entre eux peuvent être utilisés. (+) Des accolades peuvent être nécessaires pour isoler une substitution de variables à partir d'un deux-points littéral, comme dans la Substitution d'historique ; tout modificateur doit apparaître à l'intérieur des accolades)

Les substitutions suivantes ne peuvent être modifiées par les modificateurs « : » :

$?nom

${?nom}
Remplacé par la chaîne de caractère « 1 » si nom est défini, ou « 0 » sinon.
$?0
Remplacé par « 1 » si le nom du fichier d'entrée courant est connu, ou « 0 » sinon. Vaut toujours « 0 » dans les shells interactifs.

$#nom

${#nom}
Remplacé par le nombre de mots de nom.

$#
Équivalent à « $#argv ». (+)

$%nom

${%nom}
Remplacé par le nombre de caractères de nom. (+)

$%nombre

${%nombre}
Remplacé par le nombre de caractères de $argv[nombre]. (+)
$?
Équivalent à « $status ». (+)
$$
Remplacé par le numéro de processus (décimal) du shell (parent).
$!
Remplacé par le numéro (décimal) du processus du dernier processus tournant en tâche de fond lancé par ce shell. (+)
$_
Remplacé par la ligne de commandes de la dernière commande exécutée. (+)
$<
Remplacé par une ligne de l'entrée standard, sans interprétation ultérieure. Cela peut être utilisé pour lire à partir du clavier dans un script shell. (+) Alors que csh protège toujours $< comme s'il était équivalent à « $<:q », tcsh ne le fait pas. De plus, quand tcsh attend que l'utilisateur tape une ligne, celui-ci peut taper un caractère d'interruption pour interrompre la séquence dans laquelle la ligne doit être substituée, mais csh ne permet pas cela.

La commande d'éditeur expand-variables, normalement liée à « ^X-$ », peut être utilisée pour développer interactivement des variables individuelles.

Substitution de commandes, de noms de fichiers et de pile de répertoires

Les substitutions restantes sont appliquées sélectivement aux arguments des commandes intégrées. Cela signifie que les parties des expressions qui ne sont pas évaluées ne sont pas sujettes à ces développements. Pour les commandes qui ne font pas partie du shell, le nom de la commande est substitué séparément de la liste d'arguments. Cela se produit très tard, après que les redirections d'entrée-sortie aient été effectuées, et dans un fils du shell principal.

Substitution de commandes

La substitution de commandes est indiquée par une commande entourée de « ` ». La sortie d'une telle commande est découpée en mots séparés aux emplacements des blancs, tabulations et sauts de ligne, et les mots vides sont éliminés. La sortie subit la substitution des variables et des commandes et remplace la chaîne de caractères originale.

La substitution de commandes à l'intérieur de guillemets (« " ») retient les blancs et les tabulations ; seuls les sauts de lignes entraînent de nouveaux mots. Le saut de ligne final n'entraîne jamais de nouveau mot. Il est ainsi possible qu'une substitution de commande ne produise qu'une partie d'un mot, même si la commande produit une ligne complète en sortie.

Substitution des noms de fichiers

Si un mot contient l'un des caractères « * », « ? », « [ » ou « { », ou commence par le caractère « ~ », alors il est candidat à la substitution des noms de fichier, également connue sous le nom de de « développement » (globbing). Ce mot est ensuite considéré être un motif (dit « générique »), et est remplacé par une liste triée alphabétiquement de noms de fichiers correspondant au motif.

Dans les noms de fichiers correspondant, le caractère « . » présent au début d'un nom de fichier ou suivant immédiatement un « / » doit être reconnu explicitement. Le caractère « * » convient pour n'importe quelle chaîne de caractères, y compris la chaîne vide. Le caractère « ? » correspond à n'importe quel caractère. La séquence « [...] » reconnaît n'importe quel caractère enfermé dans les crochets. À l'intérieur de « [...] », une paire de caractères séparés par un « - » correspond à n'importe quel caractère présent lexicalement entre les deux.

(+) Certains motifs génériques peuvent être niés : la séquence « [^...] » correspond à n'importe quel caractère non spécifié par les caractères et/ou intervalles de caractères présents entre les crochets.

Un motif générique entier peut également être nié avec « ^ » :

> echo *
bang crash crunch ouch
> echo ^cr*
bang ouch

Les motifs génériques qui n'utilisent pas « ? », « * » ou « [] », ou qui utilisent « {} » ou « ~ » (voir ci-dessous) ne sont pas niés correctement.

La méta-notation « a{b,c,d}e » est un raccourci pour « abe ace ade ». L'ordre de gauche à droite est préservé : « /usr/source/s1/{oldls,ls}.c » se développe en « /usr/source/s1/oldls.c /usr/source/s1/ls.c ». Les résultats des correspondances sont triés séparément à un bas niveau pour préserver cet ordre : « ../{memo,*box} » pourrait se développer en « ../memo ../box ../mbox ». (Notez que « memo » n'a pas été trié avec les résultats des « *box » correspondant) Cette construction peut se développer en des fichiers qui n'existent pas, mais une erreur peut se produire au niveau d'une commande à laquelle on a passé la liste développée. Ces constructions peuvent être imbriquées. Exception : les mots « { », « } » et « {} » sont passés sans subir la moindre modification.

Le caractère « ~ » présent au début d'un nom de fichier référence les répertoires personnels. Présent seul, c.-à-d. « ~ », il est remplacé par le répertoire personnel de l'appelant comme reflété par la variable shell home. Quand il est suivi par un nom constitué de lettres, de chiffres, et de caractères « - », le shell recherche un utilisateur portant ce nom et substitue son répertoire personnel ; ainsi, « ~ken » pourrait être développé en « /usr/ken » et « ~ken/chmach » en « /usr/ken/chmach ». Si le caractère « ~ » est suivi par un caractère autre qu'une lettre ou « / », ou qu'il apparaît ailleurs qu'au début d'un mot, il n'est pas modifié. Une commande comme « setenv MANPATH /usr/man:/usr/local/man:~/lib/man » n'effectue donc pas la substitution de répertoires, comme on est en droit de l'espérer.

Un motif générique contenant « * », « ? », « [ » ou « ~ », avec ou sans « ^ », ne peut pas ne correspondre à aucun fichier. Néanmoins, un seul motif d'une liste de motifs génériques doit correspondre à un fichier (de sorte que, p.ex., « rm *.a *.c *.o » n'échouera que s'il n'y a aucun fichier dans le répertoire courant se terminant en « .a », « .c », ou « .o ») et, si la variable shell nonomatch est définie, un motif (ou une liste de motifs) qui ne reconnaît rien n'est pas modifié(e) plutôt que de causer une erreur.

La variable shell noglob peut être définie pour empêcher la substitution des noms de fichiers, et la commande d'éditeur expand-glob, liée normalement à « ^X-* », peut être utilisée pour développer interactivement des substitutions de noms de fichiers individuels.

Substitution de pile de répertoires (+)

La pile des répertoires est une liste de répertoires, numérotés à partir de zéro, qui est utilisée par les commandes intégrées pushd, popd et dirs. dirs peut afficher, sauvegarder dans un fichier, restaurer et effacer la pile de répertoires à tout moment, et les variables shell savedirs et dirsfile peuvent être définies pour sauvegarder automatiquement la pile de répertoires à la déconnexion et la restaurer à la connexion. La variable shell dirstack peut être examinée pour visualiser la pile de répertoires, et définie pour placer des répertoires arbitraires dans la pile de répertoires.

Le caractère « = » suivi d'un ou de plusieurs chiffres se développe en une entrée dans la pile de répertoires. Le cas spécial « =- » se développe vers le dernier répertoire de la pile. Par exemple,

> dirs -v
0 /usr/bin
1 /usr/spool/uucp
2 /usr/accts/sys
> echo =1
/usr/spool/uucp
> echo =0/calendar
/usr/bin/calendar
> echo =-
/usr/accts/sys

Les variables shell noglob et nonomatch et la commande d'éditeur expand-glob s'appliquent à la pile de répertoires autant qu'aux substitutions de noms de fichiers.

Autres substitutions (+)

Il existe beaucoup d'autres transformations impliquant des noms de fichiers, et qui ne sont pas strictement apparentées à celles présentées ci-dessus, mais qui sont mentionnées ici dans un but de complétude. Tout nom de fichier peut être développé en un chemin complet quand la variable symlinks vaut « expand ». La protection empêche cette expansion, et la commande d'éditeur normalize-path le fait à la demande. La commande d'éditeur normalize-command développe les commandes présentes dans le PATH en des chemins complets à la demande. Finalement, cd et pushd interprètent « - » comme l'ancien répertoire de travail (équivalent à la variable shell owd). Cela ne constitue pas du tout une substitution, mais une abréviation qui n'est reconnue que par ces commandes. Néanmoins, cela peut également être empêché en utilisant les protections.

Commandes

Les trois sections suivantes décrivent la façon dont le shell exécute des commandes et traite ses entrées et sorties.

Commandes simples, tubes et séquences

Une commande simple est une séquence de mots, le premier d'entre eux spécifiant la commande à exécuter. Une série de commandes simples reliées par des caractères « | » forme un tube. La sortie de chaque commande d'un tube est connectée à l'entrée de la commande suivante.

Les commandes simples et les tubes peuvent être réunis dans des séquences avec « ; », et seront exécutées séquentiellement. Les commandes simples et les tubes peuvent être également être réunis dans des séquences avec « || » ou « && », indiquant, comme dans le langage C, que la seconde commande ne doit être exécutée que si la première échoue ou réussit respectivement.

Une commande simple, un tube ou une séquence peut être placé(e) entre parenthèses, « () », pour former une commande simple, qui peut à son tour être un composant d'un tube ou d'une séquence. Une commande, un tube ou une séquence peut être exécuté(e) sans attendre qu'il (elle) se termine en le (la) faisant suivre par un « & ».

Exécution de commandes intégrées ou pas

Les commandes intégrées sont exécutées à l'intérieur même du shell. Si tous les composants d'un tube (sauf le dernier) sont des commandes intégrées, le tube sera exécuté dans un sous-shell.

Les commandes parenthésées sont toujours exécutées dans un sous-shell.

(cd; pwd); pwd

affiche par conséquent le répertoire home (répertoire personnel), en vous laissant là où vous étiez (en affichant ceci après le répertoire personnel), alors que

cd; pwd

vous laisse dans le répertoire home. Les commandes parenthésées sont le plus souvent utilisées pour éviter que cd n'affecte le shell courant.

Quand une commande à exécuter ne se trouve pas être une commande intégrée, le shell essaie d'exécuter la commande en utilisant execve(2). Chaque mot de la variable path nomme un répertoire dans lequel le shell recherchera la commande. S'il ne reçoit ni l'option -c, ni l'option -t, le shell hache les noms de ces répertoires dans une table interne de sorte qu'il n'essaiera un execve(2) dans un répertoire que s'il y a une possibilité que la commande y réside. Cela accélère considérablement la localisation des commandes quand un grand nombre de répertoires sont présents dans le chemin de recherche. Si ce mécanisme a été désactivé (via unhash), si on a fourni l'argument -c ou -t au shell, ou dans tous les cas pour chaque répertoire faisant partie de path qui ne commence pas par un « / », le shell concatène le répertoire de travail courant au nom de commande fourni pour former le nom de chemin d'un fichier qu'il essaie ensuite d'exécuter.

Si le fichier possède des permissions d'exécution mais n'est pas exécutable dans le système (p.ex. s'il n'est ni un binaire exécutable, ni un script qui spécifie son interpréteur), alors il est supposé être un fichier contenant des commandes shell et un nouveau shell est engendré pour le lire. L'alias spécial shell peut être défini pour spécifier un interpréteur différent du shell lui-même.

Sur les systèmes qui ne comprennent pas la convention d'interpréteur de script « #! », le shell peut être compilé pour l'émuler ; voyez la variable shell version. Si c'est le cas, le shell examine la première ligne du fichier pour voir si elle est de la forme « #!interpréteur arg ... ». Si c'est le cas, le shell lancera l'interpréteur avec les arguments fournis, et lui fournira le fichier sur la sortie standard.

Entrée/Sortie

L'entrée et la sortie standard d'une commande peuvent être redirigées en utilisant la syntaxe suivante :

< nom
Ouvrir le fichier nom (qui subit d'abord le développement des variables, des commandes et des noms de fichiers) pour l'utiliser comme entrée standard.
<< mot
Lire l'entrée shell jusqu'à une ligne identique à mot. mot ne subit pas les substitutions de variables, de commandes et de noms de fichiers, et chaque ligne d'entrée est comparée à mot avant qu'une quelconque substitution ne soit effectuée sur cette ligne d'entrée, à moins qu'un « \ », « " », « ' » ou « ` » de protection apparaisse dans la variable mot et que la substitution de commandes soit effectuée sur les lignes interposées, permettant à « \ » de protéger « $ », « \ » et « ` ». Les commandes qui sont substituées voient tous leurs blancs, tabulations et sauts de lignes préservés, à l'exception du saut de ligne final qui est perdu. Le texte résultant est placé dans un fichier temporaire anonyme qui est fourni à la commande en tant qu'entrée standard.

> nom
>! nom
>& nom

>&! nom
Le fichier nom est utilisé comme sortie standard. Si le fichier n'existe pas, il est créé. Si le fichier existe, il est tronqué, son contenu précédent étant perdu.

Si la variable shell noclobber est définie, alors le fichier ne peut pas exister ou doit être un fichier spécial (p.ex. un terminal ou « /dev/null »), ou sinon une erreur surviendra. Cela aide à prévenir des destructions accidentelles de fichiers. Dans ce cas, les formes « ! » peuvent être utilisées pour supprimer cette vérification.

Les formes invoquant « & » dirigent la sortie de diagnostic (d'erreur) dans le fichier spécifié en plus de la sortie standard. nom est développé de la même façon que les noms de fichiers d'entrée « < » le sont.

>> nom
>>& nom
>>! nom

>>&! nom
Comme « > », mais concatène la sortie à la fin de nom. Si la variable shell noclobber est définie, alors le fichier doit exister, à moins que l'une des formes « ! » ne soit fournie.

Une commande reçoit l'environnement dans lequel le shell a été invoqué, comme modifié par les paramètres d'entrée-sortie et par la présence de la commande dans un tube. Par conséquent, à la différence de certains shells antérieurs, les commandes lancées à partir d'un fichier de commandes shell n'ont pas accès par défaut au texte des commandes ; elles reçoivent plutôt l'entrée standard originelle du shell. Le mécanisme « << » devrait être utilisé pour présenter des données en ligne. Cela permet aux scripts de commandes shell de fonctionner comme des composants de tube, et au shell de lire son entrée par blocs. Notez que l'entrée standard par défaut d'une commande détachée n'est pas le fichier vide /dev/null, mais l'entrée standard originelle du shell. Si c'est un terminal et que le processus essaie de lire à partir du terminal, alors le processus bloquera et l'utilisateur sera averti (voir Travaux).

La sortie de diagnostic peut être dirigée dans un tube avec la sortie standard. Utilisez simplement la forme « |& » plutôt que seulement « | ».

Le shell ne peut actuellement rediriger la sortie de diagnostic sans rediriger également la sortie standard, mais « (commande > fichier-sortie) >& fichier-erreur » est souvent un détour acceptable. Soit fichier-sortie, soit fichier-erreur peut être « /dev/tty » pour envoyer la sortie sur le terminal.

Fonctionnalités

Ayant décrit la façon dont le shell accepte, analyse et exécute des lignes de commandes, nous allons maintenant traiter quelques unes de ses fonctionnalités utiles.

Flux de contrôle

Le shell contient quelques commandes qui peuvent être utilisées pour réguler le flux de contrôle dans les fichiers de commandes (scripts shell) et (dans des formes limitées mais néanmoins utiles) dans l'entrée provenant d'un terminal. Ces commandes opèrent toutes en forçant le shell à relire ou à passer son entrée et, à cause de l'implémentation, restreignent l'emplacement de certaines de ces commandes.

Les instructions foreach, switch et while, comme la forme if-then-else de l'instruction if, requièrent que les mots-clés principaux apparaissent dans une commande unique d'une ligne d'entrée comme montré plus bas.

Si on ne peut pas parcourir l'entrée du shell, le shell place l'entrée dans une mémoire tampon à chaque fois qu'il remarque une boucle, et effectue des recherches dans ce tampon interne pour effectuer la relecture impliquée par la boucle. (Dans la mesure du possible, les goto en arrière fonctionneront dans de telles entrées.)

Expressions

Les commandes intégrées if, while et exit utilisent des expressions possédant une syntaxe commune. Les expressions peuvent inclure n'importe lequel des opérateurs décrits dans les trois prochaines sections. Notez que la commande intégrée @ dispose de sa propre syntaxe.

Opérateurs logiques, arithmétiques et de comparaison

Ces opérateurs sont similaires à ceux du C et ont la même priorité. Ils incluent :

|| && | ^ & == != =~ !~ <= >=
< > << >> + - * / % ! ~ ( )

Ici, la priorité augmente en allant vers la droite, « == », « != », « =~ » et « !~ », « <= », « >= », « < » et « > », « << » et « >> », « + » et « - », « * », « / » et « % » ayant, dans leurs groupes respectifs, la même priorité. Les opérateurs « == », « != », « =~ » et « !~ » comparent leurs arguments comme des chaînes de caractères ; tous les autres travaillent sur des nombres. Les opérateurs « =~ » et « !~ » sont similaires à « != » et « == » mis à part que le membre de droite est un motif générique (voyez Substitution des noms de fichiers) auquel on essaie de faire correspondre l'opérande de gauche. Cela amoindrit le besoin de la commande intégrée switch dans des scripts shell où tout ce qui est réellement nécessaire est la reconnaissance de motifs.

Les chaînes de caractères commençant par « 0 » sont considérées être des nombres octaux. Les arguments vides ou manquants sont considérés valoir « 0 ». Les résultats de toutes les expressions sont des chaînes de caractères représentant des nombres décimaux. Il est important de noter que deux composants d'une expression ne peuvent apparaître dans le même mot ; à moins qu'ils ne soient adjacents à des composants d'expressions qui sont ont une signification syntaxique pour l'analyseur syntaxique (« & », « | », « < », « > », « ( » ou « ) »), ils devraient être entourés par des espaces.

Valeur de retour des commandes

Les commandes peuvent être exécutées dans des expressions, et leur valeur de retour peut être renvoyée en les entourant d'accolades (« {} »). Souvenez-vous que les accolades doivent être séparées des mots des commandes par des espaces. L'exécution d'une commande réussit en renvoyant la valeur vrai, c.-à-d. « 1 », si la commande se termine avec la valeur de retour 0 ; sinon, elle échoue en renvoyant la valeur faux, c.-à-d. « 0 ». Si des informations de statut plus détaillées sont requises, alors la commande devrait être exécutée à l'extérieur d'une expression et la variable shell status devrait être examinée.

Opérateurs de tests de fichiers

Certains de ces opérateurs effectuent des tests vrai/faux sur des fichiers et objets apparentés. Ils sont de la forme -op fichier, où op peut être :

Accès en lecture
Accès en écriture
Exécutable
Exécutable dans le « path » ou commande intégrée, p.ex. « -X ls » et « -X ls-F » sont vrais en général, mais « -X /bin/ls » ne l'est pas (+)
Existence
Propriété
Taille nulle
Taille non nulle (+)
Fichier texte
Répertoire
Lien symbolique (+) *
Fichier spécial en mode bloc (+)
Fichier spécial en mode caractère (+)
Tube nommé (fifo) (+) *
Fichier spécial de socket (+) *
Le bit SUID est positionné (+)
Le bit SGID est positionné (+)
Le bit collant (sticky bit) est positionné (+)
fichier (qui doit être un nombre) est un descripteur de fichier ouvert pour un périphérique de terminal (+)
A été migré (convex uniquement) (+)
Applique les opérateurs ultérieurs dans un test multi-opérateurs à un lien symbolique plutôt qu'au fichier vers lequel le lien pointe (+) *

fichier subit le développement des noms de commandes et de fichiers, et est ensuite testé pour voir s'il a la relation spécifiée avec l'utilisateur réel. Si fichier n'existe pas ou est inaccessible ou, pour les opérateurs indiqués par « * », si le type de fichier spécifié n'existe pas sur le système, alors toutes les requêtes renvoient faux, c.-à-d. « 0 ».

Ces opérateurs peuvent être combinés pour la concision : « -xyfichier » est équivalent à « -x fichier && -y fichier ». (+) Par exemple, « -fx » est vrai (renvoie « 1 ») pour les fichiers texte exécutables, mais pas pour les répertoires.

L peut être utilisé dans un test multi-opérateurs pour appliquer les opérateurs ultérieurs à un lien symbolique plutôt qu'au fichier vers lequel il pointe. Par exemple, « -lLo » est vrai pour les liens possédés par l'utilisateur appelant. Lr, Lw et Lx sont toujours vrais pour les liens et faux pour les non-liens. L a une signification différente quand il est le dernier opérateur d'un test multi-opérateurs ; voyez ci-dessous.

Il est possible mais pas utile, et cela induit parfois en erreur, de combiner des opérateurs qui s'attendent à ce que fichier soit un fichier avec des opérateurs qui ne s'y attendent pas, (p.ex. X et t). Faire suivre L par un opérateur non-fichier peut générer des résultats particulièrement étranges.

D'autres opérateurs revoient d'autres informations, c.-à-d. pas uniquement « 0 » ou « 1 ». (+) Ils ont le même format qu'auparavant ; op peut être :

Date de dernier accès au fichier, mesuré en nombre de secondes depuis l'Epoch
Comme A, mais dans un format d'horodate, p.ex. « Fri May 14 16:36:10 1993 »
Date de dernière modification du fichier
Comme M, mais dans le format d'horodate
Date de dernière modification d'i-nœud
Comme C, mais dans le format d'horodate
Numéro de périphérique
Numéro d'i-nœud
Identifiant de fichier composé, de la forme périphérique:i-nœud
Le nom du fichier qui est pointé par un lien symbolique
Nombre de liens (matériels)
Permissions, en octal, sans le zéro de tête
Comme P, avec le zéro de tête
Pmode
Équivalent à « -P fichier & mode », p.ex. « -P22 fichier » renvoie « 22 » si fichier est accessible en écriture pour le groupe et les autres utilisateurs, « 20 » s'il ne l'est que pour le groupe, et « 0 » s'il ne l'est pour aucun d'entre eux
Pmode:
Comme Pmode:, sans le zéro de tête
Identifiant numérique de l'utilisateur
Nom d'utilisateur, ou ID d'utilisateur numérique si le nom d'utilisateur est inconnu
Identifiant numérique de groupe
Nom de groupe, ou ID de groupe numérique si le nom du groupe est inconnu
Taille en octets

Un seul de ces opérateurs peut apparaître dans un test multi-opérateurs, et doit être le dernier. Notez que L a une signification différente s'il est placé ou pas à la fin d'un test multi-opérateurs. Puisque « 0 » est une valeur de retour valide pour beaucoup de ces opérateurs, ils ne renvoient pas « 0 » quand ils échouent : la plupart renvoient « -1 », et F renvoie « : ».

Si le shell est compilé avec POSIX défini (voyez la variable shell version), le résultat d'un test de fichier est basé sur les bits de permission du fichier, et pas sur le résultat de l'appel système access(2). Par exemple, si l'on teste un fichier avec -w dont les permissions permettraient d'habitude l'écriture mais qui est situé dans un système de fichiers qui est monté en lecture seule, le test réussira dans un shell POSIX, mais échouera dans un shell non POSIX.

Les opérateurs de tests de fichiers peuvent également être évalués avec la commande intégrée filetest (+).

Travaux

Le shell associe un travail (job) à chaque tube. Il conserve une table des travaux courants, ceux qui sont affichés par la commande jobs, et leur affecte des numéros entiers courts. Quand un travail est démarré de façon asynchrone avec « & », le shell affiche une ligne qui ressemble à

[1] 1234

qui indique que le travail qui a été démarré de façon asynchrone était le travail numéro 1 qui est constitué d'un processus (de haut niveau), dont l'identifiant de processus est 1234.

Si un de vos travaux s'exécute et que vous souhaitez faire autre chose, vous pouvez taper la touche de suspension (en général « ^Z ») qui envoie un signal STOP au travail courant. Le shell indiquera alors normalement que le travail a été suspendu (« Suspended ») et affichera une autre invite. Si la variable shell listjobs est définie, tous les travaux seront listés à la manière de la commande intégrée jobs ; si elle vaut « long », le listage sera effectué dans un format long, comme avec « jobs -l ». Vous pouvez ensuite manipuler l'état du travail suspendu. Vous pouvez le placer en arrière-plan (« background ») avec la commande bg ou lancer d'autres commandes et replacer le travail en avant-plan (« foreground ») avec fg. (Voyez également la commande d'éditeur run-fg-editor.) Un « ^Z » prend effet immédiatement et est semblable à une interruption dans le sens où la sortie restante et l'entrée non lue sont éliminées quand ce caractère est tapé. La commande intégrée wait indique au shell d'attendre la fin de tous les travaux tournant en tâche de fond.

La touche « ^] » envoie un signal de suspension retardé au travail courant, et ne génère pas de signal STOP avant qu'un programme n'essaie de le lire (via read(2)). Cela peut être utilement tapé quand vous avez préparé quelques commandes pour un travail que vous voulez arrêter avant qu'il ne les ait lues. La touche « ^Y » effectue cette fonction dans csh(1) ; dans tcsh, « ^Y » est une commande d'édition. (+)

Un travail lancé en arrière-plan s'arrête s'il essaie de lire quelque chose à partir du terminal. Les travaux en arrière-plan peuvent normalement produire une sortie, mais cela peut être désactivé en fournissant la commande « stty tostop ». Si vous définissez cette option de terminal, alors les travaux en arrière-plan s'arrêteront s'ils essaient de produire une sortie comme ils le font lorsqu'ils essaient de lire une entrée.

Il y a plusieurs façons de référencer les travaux du shell. Le caractère « % » introduit un nom de travail. Si vous voulez désigner le travail numéro 1, vous pouvez utiliser « %1 ». Le simple fait de nommer un travail le ramène à l'avant-plan ; ainsi, « %1 » est un synonyme de « fg %1 », ramenant le travail 1 à l'avant-plan. D'une manière similaire, « %1 & » envoie le travail 1 à l'arrière-plan, tout comme « bg %1 ». Un travail peut également être nommé en utilisant un préfixe non ambigu de la chaîne de caractères tapée pour le démarrer : « %ex » redémarrerait normalement un travail ex(1) suspendu, s'il n'y avait qu'un seul travail suspendu dont le nom commence par la chaîne de caractères « ex ». Il est également possible de taper « %?chaîne-caractères » pour spécifier un travail dont le texte contient chaîne-caractères, s'il n'y a qu'un seul travail de ce type.

Le shell entretient une notion de travaux actuels et précédents. Dans une sortie rattachée à des travaux, le travail courant est marqué par un « + » et le travail précédent par un « - ». Les abréviations « %+ », « % » et (par analogie avec la syntaxe du mécanisme history) « %% » se réfèrent toutes au travail courant, alors que « %- » se réfère au travail précédent.

Le mécanisme de contrôle des travaux requiert que l'option « new » de stty(1) soit définie sur certains systèmes. C'est un artefact d'une « nouvelle » implémentation du pilote de tty qui permet la génération de caractères d'interruption à partir du clavier pour indiquer aux travaux de s'arrêter. Voyez stty(1) et la commande intégrée setty pour des détails sur l'utilisation des options du nouveau pilote tty.

Rapport de statut

Le shell apprend immédiatement le changement d'état d'un processus. Il vous informe normalement à chaque fois qu'un travail devient bloqué au point qu'aucune progression future n'est possible, mais juste avant il affiche une invite. Cela est effectué de sorte que cela ne perturbe en aucune façon votre travail. Si vous définissez néanmoins la variable shell notify, le shell vous informera immédiatement des changements d'état des travaux en tâche de fond. Il existe également une commande shell notify qui marque un processus pour que ses changements de statut soient immédiatement rapportés. Par défaut, notify marque le processus courant ; tapez simplement « notify » après le lancement d'un travail en tâche de fond pour le marquer.

Quand vous essayez de quitter le shell alors que des travaux sont stoppés, vous serez averti du fait que « You have stopped jobs. » (Il y a des travaux arrêtés). Vous pouvez utiliser la commande jobs pour les visualiser. Si vous faites cela ou que vous essayez immédiatement de sortir à nouveau, le shell ne vous avertira pas une seconde fois, et les travaux suspendus seront terminés.

Événements automatiques, périodiques et minutés (+)

Il y a différentes façons de lancer des commandes et d'entreprendre d'autres actions automatiquement à différents moments du « cycle de vie » du shell. Elles sont résumées ici, et sont décrites en détail dans les sections Commandes intégrées, Variables shell spéciales et Alias spéciaux appropriées.

La commande intégrée sched place les commandes dans une liste d'événements programmés, pour qu'elle soit exécutée par le shell à un moment donné.

Les Alias spéciaux beepcmd, cwdwmd, periodic, precmd, postcmd et jobcmd peuvent être définis, respectivement, pour exécuter des commandes lorsque le shell veut faire retentir la sonnette, quand le répertoire de travail change, toutes les tperiod minutes, avant chaque invite, avant que chaque commande soit exécutée, après chaque exécution de commande, et quand un travail est démarré ou est amené à l'avant-plan.

La variable shell autologout peut être définie pour déconnecter ou verrouiller le shell après un certain nombre de minutes d'inactivité.

La variable shell mail peut être définie pour vérifier périodiquement si l'on a reçu des courriels.

La variable shell printexitvalue peut être définie pour afficher la valeur de retour des commandes qui se terminent avec un statut différent de zéro.

La variable shell rmstar peut être définie pour demander à l'utilisateur s'il veut réellement exécuter « rm * ».

La variable shell time peut être définie pour exécuter la commande intégrée time après la terminaison de tous les processus prenant plus d'un nombre donné de secondes CPU.

Les variables shell watch et who peuvent être définies pour que l'on soit informé des connexions et déconnexions des utilisateurs sélectionnés, et la commande intégrée log le fait n'importe quand.

Support Système de la Langue Native (+)

(Native Language System Support, NLS)

Le shell supporte les caractères 8 bits (si cela est intégré lors de la compilation ; voyez la variable shell version), et supporte donc les jeux de caractères nécessitant cette capacité. La prise en charge du NLS diffère selon que le shell a été compilé pour utiliser le NLS du système ou pas (voyez à nouveau version). Dans tous les cas, l'ASCII 7 bits est la valeur de classification (par exemple l'identité des caractères imprimables) et de tri de caractères par défaut, et la modification des variables d'environnement LANG ou LC_CTYPE entraîne une vérification des changements possibles à cet égard.

Lors de l'utilisation du NLS du système, la fonction setlocale(3) est appelée pour déterminer la classification et le tri de caractères appropriés. Cette fonction examine typiquement les variables d'environnement LANG et LC_CTYPE ; référez-vous à la documentation système pour plus de détails. Quand il n'utilise pas le NLS du système, le shell le simule en supposant que le jeu de caractères ISO 8859-1 est utilisé à chaque fois que l'une des variables LANG et LC_CTYPE est définie, quelle que soit sa valeur. Le tri n'est pas affecté par le NLS simulé.

De plus, que ce soit pour le NLS réel ou pour le NLS simulé, tous les caractères imprimables situés dans l'intervalle \200-\377, c.-à-d. ceux qui possèdent des liaisons M-caractère, sont automatiquement re-liés à self-insert-command. La liaison correspondante de la séquence escape-caractère, s'il y en a une, est laissée seule. Ces caractères ne sont pas re-liés si la variable d'environnement NOREBIND est définie. Cela peut être utile pour le NLS simulé, ou pour un NLS natif réel qui suppose un jeu de caractères ISO 8859-1 complet. Sinon, toutes les liaisons M-car de l'intervalle \240-\377 sont effectivement annulées. Une reliaison explicite des touches pertinentes avec bindkey est bien entendu toujours possible.

Les caractères inconnus (c.-à-d. ceux qui ne sont ni imprimables, ni des caractères de contrôle) sont affichés dans le format \nnn. Si le tty n'est pas dans le mode 8 bits, les autres caractères 8 bits sont affichés en les convertissant en ASCII et en utilisant le mode saillant (standout). Le shell ne modifie jamais le mode 7/8 bits du tty, et traque les modifications de mode 7/8 bits initiés par l'utilisateur. Les utilisateurs du NLS (ou ceux qui veulent utiliser une touche méta à cet effet) peuvent devoir régler explicitement le tty dans le mode 8 bits en utilisant la commande stty(1) appropriée dans, p.ex., le fichier ~/.login.

Support des variantes de Systèmes d'Exploitation (+)

De nouvelles commandes intégrées sont fournies pour supporter les fonctionnalités de systèmes d'exploitation particuliers. Elles sont décrites en détail dans la section Commandes intégrées.

Sur les systèmes supportant le TCF (aix-ibm370, aix-ps2), getspath et setspath obtiennent et règlent le chemin d'exécution du système, getxvers et setxvers obtiennent et règlent le préfixe de version expérimentale et migrate migre des processus entre des sites. La commande intégrée jobs affiche le site sur lequel chaque travail est en cours d'exécution.

Sous Domain/OS, inlib ajoute les bibliothèques partagées à l'environnement courant, rootnode modifie le nœud racine et ver modifie le type de système.

Sous Mach, setpath est équivalent au setpath(1) de Mach.

Sous Masscomp/RTU et Harris CX/UX, universe définit l'univers.

Sous Harris CX/UX, ucb ou att exécute une commande dans l'univers spécifié.

Sous Convex/OS, warp affiche ou définit l'univers.

Les variables d'environnement VENDOR, OSTYPE et MACHTYPE indiquent respectivement le vendeur, le système d'exploitation et le type de machine (la classe du microprocesseur ou le modèle de machine) du système sur lequel le shell pense tourner. Elles sont particulièrement utiles lors du partage d'un répertoire personnel entre différents types de machines ; on peut faire, par exemple, un

set path = (~/bin.$MACHTYPE /usr/ucb /bin /usr/bin .)

dans son ~/.login et placer les exécutables compilés pour chaque machine dans le répertoire approprié.

La variable shell version indique quelles options ont été choisies quand le shell a été compilé.

Remarquez également la commande intégrée newgrp, les variables shell afsuser et echo_style, et les emplacements dépendants du système des fichiers d'entrée du shell (voyez FICHIERS).

Traitement des signaux

Les shells de connexion ignorent les interruptions lors de la lecture du fichier ~/.logout. Le shell ignore les signaux quit à moins qu'il n'ait été démarré avec l'option -q. Les shells de connexion captent le signal de terminaison, mais les autres shells héritent du comportement de terminaison de leurs parents. Les autres signaux ont les valeurs que le shell a héritées de son parent.

Dans les scripts shell, le traitement des signaux d'interruption et de terminaison par le shell peut être contrôlé par onintr, et son traitement des déconnexions peut être contrôlé avec hup et nohup.

Le shell se termine lors d'une déconnexion (voyez également la variable shell logout). Les enfants du shell le font également, mais le shell ne leur envoie pas de signal de déconnexion (hangup) quand il se termine. hup fait en sorte que le shell envoie un signal HANGUP à un enfant quand il se termine, et nohup indique à un enfant d'ignorer les signaux de déconnexion.

Gestion des terminaux (+)

Le shell utilise 3 ensembles différents de modes de terminaux (« tty ») : « edit », utilisé pour l'édition ; « quote », utilisé pour la protection de caractères littéraux, et « execute », utilisé lors de l'exécution de commandes. Le shell maintient certains réglages dans chaque constante de mode, de sorte que les commandes quittant le tty dans un état de confusion n'interfèrent pas avec le shell. Le shell détecte également les modifications dans la vitesse et le remplissage (padding) du tty. La liste des modes de tty qui sont maintenus constants peut être examinée et modifiée avec la commande setty. Notez que bien que l'éditeur utilise le mode CBREAK (ou son équivalent), il utilise de toute façon les caractères tapés à l'avance.

Les commandes echotc, settc et telltc peuvent être utilisées pour manipuler et déboguer les capacités du terminal à partir de la ligne de commandes.

Sur les systèmes supportant SIGWINCH ou SIGWINDOW, le shell s'adapte automatiquement au redimensionnement des fenêtres et ajuste les variables d'environnement LINES et COLUMNS en conséquence si elles sont définies. Si la variable d'environnement TERMCAP contient les champs li# et co#, le shell les ajuste pour refléter la nouvelle taille de fenêtre.

RÉFÉRENCES

Les sections suivantes de ce manuel décrivent les Commandes intégrées, Alias spéciaux et Variables shell spéciales.

Commandes intégrées

%job
Un synonyme de la commande intégrée fg.
%job &
Un synonyme de la commande intégrée bg.
:
Ne fait rien, avec succès.

@
@ nom = expr
@ nom[indice] = expr
@ nom++|--

@ nom[indice]++|--
La première forme affiche la valeur de toutes les variables shell.

La deuxième forme affecte la valeur de expr à nom. La troisième forme affecte la valeur de expr au indice-ième composant de nom ; le nom et son indice-ième composant doivent tous deux exister au préalable.

expr peut contenir les opérateurs « * », « + », etc., comme en C. Si expr contient « < », « > », « & » ou "" (la chaîne vide), alors au moins cette partie de expr doit être placée entre parenthèses. Notez que la syntaxe de expr n'a rien à voir avec celle décrite dans Expressions.

Les quatrième et cinquième formes incrémentent (« ++ ») ou décrémentent (« -- ») nom de son indice-ième composant.

L'espace entre « @ » et nom est obligatoire. Les espaces entre nom et « = », et entre « = » et expr sont optionnelles. Les composants de expr doivent être séparés par des espaces.

Sans arguments, affiche tous les alias. Avec nom, affiche l'alias de ce nom. Avec nom et liste_mots, affecte liste_mots comme alias pour nom. liste_mots subit la substitution des commandes et des noms de fichiers. nom ne peut pas être « alias » ou « unalias ». Voyez également la commande intégrée unalias.
Affiche la quantité de mémoire dynamique acquise, découpée entre mémoire utilisée et mémoire libre. Avec un argument, affiche le nombre de blocs libres et utilisés dans chaque catégorie de taille. Les catégories débutent à la taille 8 et doublent à chaque pas. La sortie de cette commande peut varier selon les types de systèmes, puisque les systèmes autres que VAX peuvent utiliser un allocateur de mémoire différent.
Place les travaux spécifiés (ou, sans argument, le travail courant) en tâche de fond (arrière-plan), continuant tous ceux d'entre eux qui sont arrêtés. travail peut être un nombre, une chaîne de caractères, la chaîne vide, « % », « + » ou « - » comme décrit dans Travaux.

bindkey [-l|-d|-e|-v|-u] (+)
bindkey [-a] [-b] [-k] [-r] [--] touche (+)

Sans option, la première forme liste toutes les touches liées et les commandes d'éditeur correspondantes, la deuxième forme liste la commande d'éditeur à laquelle touche est liée, et la troisième forme lie la commande d'éditeur commande à touche. Les options incluent :

Liste toutes les commandes d'éditeur et une courte description pour chacune d'entre elles.
Liste toutes les touches des liaisons standard de l'éditeur par défaut.
Liste toutes les touches des liaisons standard de type GNU Emacs.
Liste toutes les touches des liaisons standard de type vi(1).
Affiche ou modifie les liaisons de touches dans la cartographie clavier alternative. C'est la cartographie clavier utilisée dans le mode commande de vi.
touche est interprétée comme un caractère de contrôle écrit ^caractère (p.ex. « ^A ») ou C-caractère (p.ex. « C-A »), un métacaractère écrit M-caractère (p.ex. « M-A »), une touche de fonction écrite F-chaîne_caractères (p.ex. « F-chaîne_caractères »), ou une touche préfixe étendue écrite X-caractère (p.ex. « X-A »).
touche est interprétée en tant que nom de touche fléchée symbolique, qui peut être « down » (bas), « up » (haut), « left » (gauche) ou « right » (droite).
Supprime la liaison de touche. Faites attention : « bindkey -r » ne lie pas key à self-insert-command, elle « délie » touche complètement.
commande est interprétée en tant que commande intégrée ou commande externe au lieu d'une commande d'éditeur.
commande est interprétée en tant que chaîne de caractères littérale et est traitée comme entrée pour le terminal quand la touche est pressée. Les touches liées à commande sont elles-mêmes réinterprétées, et cela se poursuit jusqu'à 10 niveaux d'interprétation.
--
Force une cassure dans le traitement des options, afin que le mot suivant soit interprété comme une touche même s'il commence par « - ».
-u (ou toute option invalide)
Affiche un message d'utilisation.

touche peut être un unique caractère ou une chaîne de caractères. Si une commande est liée à une chaîne de caractères, le premier caractère de la chaîne est lié à sequence-lead-in et la chaîne de caractères entière est liée à la commande.

Les caractères de contrôle dans touche peuvent être littéraux (ils peuvent être tapés en les faisant précéder par la commande d'éditeur quoted-insert, liée normalement à « ^V ») ou écrits dans le style accent_circonflexe-caractère, p.ex. « ^A ». Delete est écrit « ^? » (accent_circonflexe-point_d_interrogation). touche et commande peuvent contenir des séquences d'échappement backslashées (dans le style du echo(1) de System V) comme suit :

\a
Sonnerie
Effacement arrière (backspace)
Échappement (escape)
Saut de page
Saut de ligne
Retour chariot
Tabulation horizontale
Tabulation verticale
Le caractère ASCII correspondant au nombre octal nnn

« \ » annule la signification spéciale du caractère suivant, s'il y en a un, notamment « \ » et « ^ ».

Reprendre l'exécution après le end du foreach ou while englobant le plus proche. Les commandes restant sur la ligne courante sont exécutées. Des breaks sur plusieurs niveaux sont donc possibles en les écrivant tous sur une seule ligne.
Provoque une cassure dans un switch, en reprenant après le endsw.
Affiche le nom de toutes les commandes intégrées.
bye (+)
Un synonyme de la commande intégrée logout. Disponible uniquement si le shell a été compilé de cette façon ; voyez la variable shell version.
Une étiquette dans une instruction switch (voir plus bas).
Si un répertoire nom est fourni, remplace le répertoire de travail courant du shell par nom. Sinon, le remplacer par home. Si nom est « - », il est interprété en tant que répertoire de travail précédent (voyez Autres substitutions). (+) Si nom n'est pas un sous-répertoire du répertoire courant (et ne commence pas par « / », « ./ » ou « ../ »), chaque composant de la variable cdpath est analysé pour voir s'il comporte un sous-répertoire nom. Finalement, si tout échoue mais que nom est une variable shell dont la valeur débute par « / », alors on essaie de voir si c'est un répertoire.

Avec -p, affiche la pile de répertoires finale, tout comme dirs. Les drapeaux -l, -n et -v ont le même effet sur cd que sur dirs, et impliquent -p. (+)

Voyez également la variable shell implicitcd.

Un synonyme de la commande intégrée cd.
Sans argument, liste tous les complètements. Avec commande, liste les complètements pour commande. Avec commande et mot etc., définit les complètements.

commande peut être un nom de commande complet ou un motif générique (voyez Substitution des noms de fichiers). Elle peut commencer par « - » pour indiquer que le complètement ne devrait être utilisé que si la commande est ambiguë.

mot spécifie quel mot relatif au mot courant doit être complété, et peut être :

Complètement du mot courant. motif est un motif générique qui doit correspondre au commencement du mot courant sur la ligne courante. motif est ignoré lors du complètement du mot courant.
Comme c, mais inclut motif lors du complètement du mot courant.
Complètement du mot suivant. motif est un motif générique qui doit correspondre au commencement du mot précédent sur la ligne de commandes.
Comme n, mais doit correspondre au commencement du mot situé à deux positions avant le mot courant.
Complètement dépendant de la position. motif est un intervalle numérique, avec la même syntaxe que celle utilisée pour indexer les variables shell, et qui doit inclure le mot courant.

liste, la liste des complètements possibles, peut être :

Alias
Liaisons (commandes d'éditeur)
Commandes (intégrées ou externes)
Commandes externes débutant par le préfixe de chemin fourni
Répertoires
Répertoires commençant par le préfixe de chemin fourni
Variables d'environnement
Noms de fichiers
Noms de fichiers commençant par le préfixe de chemin fourni
Noms de groupes
Travaux
Limites
Rien
Variables shell
Signaux
fichiers plats (« texte »)
fichiers plats (« texte ») commençant par le préfixe de chemin fourni
N'importe quelle variable
Noms d'utilisateurs
Comme n, mais affiche select quand list-choices est utilisé.
Complètements
$var
Mots provenant de la variable var
(...)
Mots provenant de la liste donnée
`...`
Mots provenant de la sortie de la commande

select est un motif générique optionnel. S'il est fourni, seuls les mots de liste qui correspondent au select sont pris en considération et la variable shell fignore est ignorée. Les trois derniers types de complètements peuvent ne pas contenir de motif select, et x utilise select comme message d'explication quand la commande d'éditeur list-choices est utilisée.

suffixe est un caractère à concaténer lors d'un complètement réussi. S'il est nul, aucun caractère n'est concaténé. S'il est omis (auquel cas le quatrième délimiteur peut également être omis), un / est concaténé aux répertoires et une espace aux autres mots.

Maintenant voici quelques exemples. Certaines commandes ne prennent que des répertoires comme arguments, de sorte que cela n'a aucun sens de compléter des fichiers normaux.

> complete cd 'p/1/d/'

ne complète que le premier mot suivant « cd » (« p/1 ») par un répertoire. Le complètement de type p peut également être utilisé pour limiter le complètement des commandes :

> co[^D]
complete compress
> complete -co* 'p/0/(compress)/'
> co[^D]
> compress

Ce complètement complète des commandes (mots en position 0, « p/0 ») qui commencent par « co » (correspondant donc à « co* ») en « compress » (le seul mot de la liste). Le « - » de tête indique que ce complètement ne doit être utilisé que pour les commandes ambiguës.

> complete find 'n/-user/u/'

est un exemple du complètement de type n. Tous les mots suivant « find » et suivant immédiatement « -user » est complété à partir de la liste des utilisateurs.

> complete cc 'c/-I/d/'

montre le complètement de type c. Tous les mots suivant « cc » et commençant par « -I » sont complétés en un répertoire. « -I » n'est pas considéré faisant partie du répertoire car nous avons utilisé un c minuscule.

Des différentes listes sont utiles avec des commandes différents.

> complete alias 'p/1/a/'
> complete man 'p/*/c/'
> complete set 'p/1/s/'
> complete true 'p/1/x:Truth has no options./'

Celles-ci complètent les mots suivant « alias » par des alias, « man » par des commandes, et « set » par des variables shell. « true » n'a aucune option, et x ne fait donc rien quand le complètement est tenté, et affiche « Truth has no options. » quand les choix de complètement sont listés.

Notez que l'exemple man, et plusieurs autres exemples plus bas, aurait tout aussi bien pu utiliser « c/* » ou « n/* » plutôt que « p/* ».

Les mots peuvent être complétés à partir d'une variable évaluée au moment du complètement :

> complete ftp 'p/1/$hostnames/'
> set hostnames = (rtfm.mit.edu tesla.ee.cornell.edu)
> ftp [^D]
rtfm.mit.edu tesla.ee.cornell.edu
> ftp [^C]
> set hostnames = (rtfm.mit.edu tesla.ee.cornell.edu uunet.uu.net)
> ftp [^D]
rtfm.mit.edu tesla.ee.cornell.edu uunet.uu.net

ou à partir d'une commande en cours d'exécution au moment du complètement :

> complete kill 'p/*/`ps | awk \{print\ \$1\}`/'
> kill -9 [^D]
23113 23377 23380 23406 23429 23529 23530 PID

Notez que la commande complete ne protège pas elle-même ses arguments, de sorte que les accolades, l'espace et le « $ » dans « {print $1} » doivent être protégés explicitement.

Une commande peut posséder plusieurs complètements :

> complete dbx 'p/2/(core)/ » 'p/*/c/'

complète le deuxième argument en « dbx » par le mot « core » et tous les autres arguments par des commandes. Notez que le complètement positionnel est spécifié avant le complètement du mot suivant. Puisque les complètements sont évalués de gauche à droite, si le complètement du mot suivant avait été spécifié en premier lieu, il conviendrait toujours et le complètement positionnel ne serait jamais exécuté. C'est une erreur courante lors de la définition d'un complètement.

Le motif select est utile quand une commande ne prend que des fichiers de formes particulières comme arguments. Par exemple,

> complete cc 'p/*/f:*.[cao]/'

ne complète les arguments de « cc » que pour les fichiers se terminant en « .c », « .a » ou « .o ». select peut également exclure des fichiers, en utilisant la négation d'un motif générique comme décrit dans Substitution des noms de fichiers. On pourrait utiliser

> complete rm 'p/*/f:^*.{c,h,cc,C,tex,1,man,l,y}/'

pour exclure un code source précieux d'un complètement « rm ». Bien sûr, on peut toujours taper les noms exclus manuellement ou surcharger le mécanisme de complètement en utilisant les commandes d'éditeur complete-word-raw ou list-choices-raw.

Les listes « C », « D », « F » et « T » sont identiques à « c », « d », « f » et « t » respectivement, à l'exception près qu'elles utilisent l'argument select d'une manière différente, pour restreindre le complètement aux fichiers commençant par un préfixe de chemin particulier. Par exemple, le programme mail Elm utilise « = » comme abréviation pour son répertoire de mail. On pourrait utiliser

> complete elm c@=@F:$HOME/Mail/@

pour compléter « elm -f = » comme s'il s'agissait de « elm -f ~/Mail/ ». Notez que nous avons utilisé « @ » au lieu de « / » pour éviter la confusion avec l'argument select, et « $HOME » au lieu de « ~ » car la substitution de répertoire personnel ne fonctionne qu'au commencement d'un mot.

suffixe est utilisé pour ajouter un suffixe non standard (pas d'espace ou de « / » pour les répertoires) aux mots complétés.

> complete finger 'c/*@/$hostnames/' 'p/1/u/@'

complète les arguments de « finger » à partir de la liste des utilisateurs, concatène un « @ », et ensuite complète après le « @ » à partir de la variable « hostnames ». Notez à nouveau l'ordre dans lequel les complètements sont spécifiés.

Finalement, voici un exemple complexe pour l'inspiration :

> complete find \
´n/-name/f/' 'n/-newer/f/' 'n/-{,n}cpio/f/' \
´n/-exec/c/' 'n/-ok/c/' 'n/-user/u/' \
´n/-group/g/' 'n/-fstype/(nfs 4.2)/' \
´n/-type/(b c d f l p s)/' \
´c/-/(name newer cpio ncpio exec ok user \
group fstype type atime ctime depth inum \
ls mtime nogroup nouser perm print prune \
size xdev)/' \
´p/*/d/'

Cela complète les mots suivant « -name », « -newer », « -cpio » ou « ncpio » (notez le motif qui correspond aux deux) en des fichiers, les mots suivant « -exec » ou « -ok » en des commandes, les mots suivant « user » et « group » en des utilisateurs et des groupes respectivement, et les mots suivant « -fstype » ou « -type » en des membres des listes données. Le complètement des options est également effectué à partir de la liste fournie (notez l'emploi du complètement de type c), et complète tout ce qui ne serait pas complété en un répertoire. Whaw !

Souvenez-vous que les complètements programmés sont ignorés si le mot en cours de complètement est une substitution de tilde (débutant par « ~ ») ou une variable (débutant par « $ »). complete est une fonctionnalité expérimentale, et sa syntaxe pourrait changer dans de futures versions du shell. Voyez également la commande intégrée uncomplete.

Passer à l'itération suivante du while ou foreach englobant le plus proche. Les commandes restant sur la ligne courante sont exécutées.
Étiquette le cas par défaut dans une instruction switch. Devrait venir après toutes les étiquettes case.

dirs [-l] [-n|-v]
dirs -S|-L [nom_fichier] (+)

La première forme affiche la pile de répertoires. Le sommet de la pile est à gauche et le premier répertoire sur la pile est le répertoire courant. Avec -l, un « ~ » ou un « ~nom » présent dans la sortie, est développé explicitement en home ou dans le nom du chemin du répertoire personnel de l'utilisateur nom. (+) Avec -n, les entrées sont enveloppées (wrapped) avant qu'elles atteignent le bord de l'écran. (+) Avec -v, les entrées sont affichées ligne par ligne, précédées par leur position dans la pile. (+) Si plus d'un -n ou -v est donné, -v a priorité. -p est accepté mais ne fait rien.

Avec -S, la deuxième forme sauvegarde la pile de répertoires dans nom_fichier sous forme d'une série de commandes cd et pushd. Avec -L, le shell utilise comme source nom_fichier, supposé être un fichier de pile de répertoires sauvegardé via l'option -S ou le mécanisme savedirs. Dans tous les cas, dirsfile est utilisé si nom_fichier n'est pas fourni et si ~/.cshdirs est utilisé alors que dirsfile n'est pas définie.

Notez que les shells de connexion font l'équivalent de « dirs -L » au démarrage et, si savedirs est définie, « dirs -S » avant de se terminer. Puisque seul ~/.tcshrc est normalement utilisé comme source avant ~/.cshdirs, dirsfile devrait être définie dans ~/.tcshrc plutôt que dans ~/.login.

La dernière forme efface la pile de répertoires.

echo [-n] mot ...
Écrit tous les mots sur la sortie standard du shell, en les séparant par des espaces et en terminant par un saut de ligne. La variable shell echo_style peut être définie pour émuler (ou non) les drapeaux et les séquences d'échappement des versions BSD et/ou System V de echo ; voyez echo(1).
Exerce les capacités du terminal (voyez termcap(5)) dans args. Par exemple, « echotc home » envoie le curseur à la position home (NdT : origine), « echotc cm 3 10 » l'envoie à la colonne 3 et à la ligne 10, et « echotc ts 0 ; echo "Ceci est un test." ; echotc fs » affiche « Ceci est un test. » dans la ligne de statut.

Si arg est « baud », « cols », « lines », « meta » ou « tabs », affiche la valeur de cette capacité (« yes » (oui) ou « no » (non) indiquant que le terminal possède ou non cette capacité). On pourrait utiliser ceci pour rendre la sortie d'un script shell moins bavarde sur les terminaux lents, ou pour limiter la sortie d'une commande au nombre de lignes de l'écran :

> set history=`echotc lines`
> @ history--

Les chaînes de caractères termcap peuvent contenir des jokers qui ne seront pas transmis correctement. On devrait utiliser des guillemets quand on on affecte une chaîne de caractères de capacité de terminal à une variable shell, comme dans l'exemple suivant qui place la date dans la ligne de statut :

> set tosl="`echotc ts 0`"
> set frsl="`echotc fs`"
> echo -n "$tosl";date; echo -n "$frsl"

Avec -s, les capacités non existantes renvoient la chaîne vide plutôt que de causer une erreur. Avec -v, les messages sont verbeux.

else
end
endif

Voyez la description des instructions foreach, if, switch et while en dessous.
Traite les arguments en tant qu'entrée pour le shell et exécute la ou les commandes résultantes dans le contexte du shell courant. Cela est habituellement utilisé pour exécuter des commandes générées comme résultat d'une substitution de commandes ou de variables, étant donné que l'analyse syntaxique se produit avant ces substitutions. Voyez tset(1) pour un exemple d'utilisation d'eval.
Exécute la commande spécifiée au lieu du shell courant.
Le shell se termine soit avec la valeur de l'expr spécifiée (une expression, comme cela est décrit dans Expressions) soit, sans expr, avec la valeur de la variable status.
Amène les travaux spécifiés (ou, sans argument, le travail courant) à l'avant-plan, continuant ceux qui étaient arrêtés. travail peut être un numéro, une chaîne de caractères, la chaîne vide, « % », « + » ou « - » comme cela est décrit dans Travaux. Voyez également la commande d'éditeur run-fg-editor.
Applique op (qui est un opérateur de test de fichier comme décrit dans Opérateurs de tests de fichiers) à chaque fichier, et renvoie les résultats dans une liste dont les éléments sont séparés par des espaces.

foreach nom (liste_mots)
...

Affecte successivement chaque membre de liste_mots à la variable nom, et exécute la séquence de commandes présente entre cette commande et le end correspondant. (foreach et end doivent tous deux apparaître seuls sur des lignes séparées.) La commande intégrée continue peut être utilisée pour passer à l'itération suivante de la boucle, et la commande intégrée break pour la terminer prématurément. Quand cette commande est lue à partir du terminal, la boucle est lue une seule fois, en affichant l'invite « foreach?  » (ou prompt2) avant que la moindre instruction de la boucle ne soit exécutée. Si vous avez commis une erreur de frappe dans une boucle sur le terminal, vous pouvez l'effacer.
Affiche le chemin d'exécution du système. (TCF uniquement)
Affiche le préfixe de version expérimentale. (TCF uniquement)
Comme echo, mais aucun échappement « \ » n'est reconnu, et les mots sont délimités par des caractères nuls dans la sortie. Utile pour les programmes qui veulent utiliser le shell pour faire subir le développement des noms de fichiers à une liste de mots.
mot subit la substitution des noms de fichiers et celle des commandes pour produire une chaîne de caractères de la forme « étiquette » (label). Le shell revient en arrière dans son entrée autant que faire se peut, recherche une ligne de la forme « étiquette: », éventuellement précédée de blancs et/ou de tabulations, et continue l'exécution après cette ligne.
Affiche une ligne de statistiques indiquant une mesure de l'efficacité de la table de hachage interne à localiser les commandes (et à éviter des execs). Un exec est tenté pour chaque composant de path où la fonction de hachage indique un succès possible, et dans chaque composant qui ne commence pas par un « / ».
Sur les machines sans vfork(2), n'affiche que le numéro et la taille des seaux de hachage.

history [-hTr] [n]
history -S|-L|-M [nom_fichier] (+)

history -c (+)
La première forme affiche la liste d'événements d'historique. Si n est fourni, seuls les n événements les plus récents seront affichés ou sauvegardés. Avec -h, la liste d'historique est affichée sans les nombres de tête. Si -T est spécifié, les horodates sont également affichées sous forme de commentaires. (Cela peut être utilisé pour produire des fichiers convenant au chargement avec « history -L » ou « source -h ».) Avec -r, l'ordre d'affichage va du plus récent au plus ancien.

Avec -S, la deuxième forme sauvegarde la liste d'historique dans nom_fichier. Si le premier mot de la variable shell savehist est un nombre, au plus ce nombre de lignes seront sauvegardées. Si le second mot de savehist est « merge », la liste d'historique est fusionnée avec le fichier d'historique existant (s'il y en a un) au lieu de le remplacer et est triée par horodate. (+) La fusion est destinée à un environnement comme le système X Window où plusieurs shells sont utilisés simultanément. Actuellement, elle ne fonctionne que lorsque les shells se terminent proprement les uns après les autres.

Avec -L, le shell concatène nom_fichier, qui est supposé être une liste d'historique sauvegardée par l'option -S ou par le mécanisme savehist, à la liste d'historique. -M est similaire à -L, mais le contenu de nom_fichier est fusionné dans la liste d'historique et est trié par horodate. Dans tous les cas, histfile est utilisé si nom_fichier n'est pas fourni et si ~/.history est utilisé alors que histfile n'est pas définie. « history -L » agit exactement comme « source -h » à part qu'il ne requiert pas de nom de fichier.

Notez que les shells de connexion font l'équivalent de « history -L » au démarrage et, si savehist est définie, « history -S » avant la terminaison. Puisque seul ~/.tcshrc est normalement utilisé comme source avant ~/.history, histfile devrait être définie dans ~/.tcshrc plutôt que dans ~/.login.

Si histlit est définie, la première et la deuxième formes affichent et sauvent la forme littérale (non développée) de la liste d'historique.

La dernière forme efface la liste d'historique.

Avec commande, lance commande de sorte qu'elle se termine à la réception d'un signal de déconnexion (HANGUP), et s'arrange pour que le shell envoie un signal HANGUP à la commande quand il se termine. Notez que les commandes peuvent définir leur propre réponse aux déconnexions, en surchargeant hup. Sans argument (permis uniquement dans un script shell), pousse le shell à se terminer en cas de réception d'un signal HANGUP dans le reste du script. Voyez également Traitement des signaux et la commande intégrée nohup.
Si expr (une expression, comme décrit dans Expressions) s'évalue à vrai, alors commande est exécutée. La substitution de variables sur commande se produit tôt, au même moment que pour le reste de la commande if. commande doit être une commande simple, et pas un alias, un tube, une liste de commandes ou une liste de commandes parenthésée, mais elle peut avoir des arguments. La redirection d'entrée/sortie se produit même si expr est fausse et que commande n'est donc pas exécutée ; c'est un bogue.

if (expr) then
...
else if (expr2) then
...
else
...

Si l'expr spécifiée est vraie, alors les commandes du premier else sont exécutées ; sinon, si expr2 est vraie, alors les commandes du deuxième else sont exécutées, etc. Le nombre de paires else-if n'est pas limité ; un seul endif est nécessaire. La partie else est également optionnelle. (Les mots else et endif doivent apparaître au début des lignes d'entrée ; le if doit apparaître seul sur sa ligne d'entrée ou après un else.)
Ajoute chaque bibliothèque-partagée à l'environnement courant. Il n'y a aucun moyen de supprimer une bibliothèque partagée. (Domain/OS uniquement)
Liste les travaux actifs. Avec -l, liste les identifiants de processus (PIDs) en plus des informations normales. Sur les systèmes TCF, affiche le site sur lequel chaque travail est en cours d'exécution.

La première et la deuxième formes envoient le signal spécifié (ou, si aucun n'a été fourni, le signal TERM (terminaison)) aux travaux ou processus spécifiés. travail peut être un numéro, une chaîne de caractères, la chaîne vide, « % », « + » ou « - » comme décrit dans Travaux. Les signaux sont fournis soit par leur numéro, soit par leur nom (ceux trouvés dans /usr/include/signal.h, desquels on retire le préfixe « SIG »). Il n'y a pas de travail par défaut ; juste taper « kill » n'envoie pas de signal au travail courant. Si le signal envoyé est TERM (terminaison) ou HUP (déconnection), alors le travail ou processus se voit également envoyer un signal CONT (continuer). La seconde forme liste le nom des signaux.
Limite la consommation de la ressource spécifiée à utilisation-maximale pour le processus courant et chacun des processus qu'il a créés. Si aucune utilisation-maximale n'est donnée, alors la limite courante est affichée ; si aucune ressource n'est fournie, alors toutes les limitations actuelles sont affichées. Si le drapeau -h est donné, des limites impératives sont utilisées au lieu des limites actuelles. Les limites impératives imposent un plafond aux valeurs des limites actuelles. Seul le super-utilisateur peut relever les limites impératives, mais un utilisateur peut baisser ou augmenter les limites actuelles à l'intérieur de l'intervalle légal.

Les ressources contrôlables incluent actuellement (si c'est supporté par le système d'exploitation :

le nombre maximum de secondes-cpu que chaque processus peut utiliser
taille de fichier : le plus grand fichier pouvant être créé
taille des données : la croissance maximale de la région données+pile via sbrk(2) au-delà de la fin du texte du programme
taille de la pile : la taille maximale de la région de la pile étendue automatiquement
la taille de la grande image mémoire (core dump) pouvant être créée
utilisation mémoire : la quantité maximale de mémoire physique qu'un processus peut avoir alloué à un moment donné
le nombre maximum de fichiers ouverts pour ce processus
le nombre maximum de threads pour ce processus
la quantité de mémoire maximale qu'un processus peut verrouiller en mémoire en utilisant mlock(2)
le nombre maximum de processus simultanés pour cet id d'utilisateur
le niveau maximal d'utilisation du tampon de socket pour cet utilisateur

utilisation-maximale peut être fournie comme un nombre (réel flottant ou entier) suivi d'un facteur d'échelle. Pour toutes les limites autres que cputime, l'échelle (l'unité) par défaut est « k » ou « kilobytes » (kilo-octets, c.-à-d. 1024 octets) ; un facteur d'échelle de « m » ou « megabytes » (mégaoctets) peut également être utilisé. Pour cputime, l'unité par défaut est la seconde (« seconds »), alors qu'on a « m » pour les minutes et « h » pour les heures, ou une heure de la forme « mm:ss » qui donne le nombre de minutes et de secondes qui peuvent être employées.

Pour les noms de ressources et de facteurs d'échelle, des préfixes nom ambigus suffisent.

Affiche la valeur de la variable shell watch et rapporte des informations sur tous les utilisateurs indiqués par watch qui sont actuellement connectés, quel que soit le moment de leur dernière connection. Voyez également watchlog.
Termine un shell de connexion, en le remplaçant par une instance de /bin/login. C'est une façon de se déconnecter qui est incluse pour assurer la compatibilité avec sh(1).
Termine un shell de connexion. Particulièrement utile si ignoreeof est définie.
Liste les fichiers comme « ls -F », mais beaucoup plus rapidement. Identifie chaque type de fichier spécial de la liste par un caractère spécial :

/
Répertoire
*
Exécutable
#
Périphérique en mode bloc
%
Périphérique en mode caractère
|
Tube nommé (uniquement pour les systèmes supportant les tubes nommés)
=
Socket (uniquement pour les systèmes supportant les sockets)
@
Lien symbolique (uniquement pour les systèmes supportant les liens symboliques)
+
Répertoire caché (AIX uniquement) ou dépendant du contexte (HP/UX uniquement)
:
Périphérique réseau spécial (HP/UX uniquement)

Si la variable shell listlinks est définie, les liens symboliques sont identifiés avec plus de détails (uniquement, bien sûr, sur les systèmes les supportant) :

@
Lien symbolique vers un non-répertoire
>
Lien symbolique vers un répertoire
&
Lien symbolique vers nulle part (lien défaillant)

listlinks ralentit également ls-F et entraîne le montage des partitions contenant des fichiers vers lesquels pointent des liens symboliques.

Si la variable shell listflags vaut « x », « a » ou « A », ou n'importe quelle combinaison d'entre eux (p.ex. « xA »), ils sont utilisés comme options pour ls-F, le faisant agir comme « ls -xF », « ls -Fa », « ls -FA » ou une combinaison (p.ex. « ls -FxA »). Sur les machines où « ls -C » n'est pas le comportement par défaut, ls-F agit comme « ls -CF », à moins que listflags ne contienne un « x », auquel cas il agit comme « ls -xF ». ls-F passe ses arguments à ls(1) si on lui fournit des options, de sorte que « alias ls ls-F » effectue généralement ce qu'on attend de lui.

La commande intégrée ls-F peut lister les fichiers en utilisant différentes couleurs en fonction du type de fichier ou d'extension. Voyez la variable tcsh color et la variable d'environnement LS_COLORS.

migrate [-site] pid|%id_trav ... (+)

La première forme migre le processus ou travail sur le site spécifié ou sur le site par défaut déterminé par le chemin du système. La seconde forme équivaut à « migrate -site $$ » : elle migre le processus courant sur le site spécifié. La migration du shell lui-même peut causer un comportement inattendu, puisque le shell n'aime pas perdre son tty (terminal). (TCF uniquement)
Équivalent à « exec newgrp » ; voyez newgrp(1). Disponible uniquement si le shell a été compilé de cette façon ; voyez la variable shell version.
Fixe la priorité d'ordonnancement du shell à nombre ou, sans nombre, à 4. Avec commande, lance commande avec la priorité appropriée. Au plus le nombre est grand, au moins le processus reçoit de temps cpu. Le super-utilisateur peut spécifier des priorités négatives en utilisant « nice -nombre ... ». La commande est toujours exécutée dans un sous-shell, et les restrictions placées sur les commandes dans les simples instructions if s'appliquent ici.
Avec commande, lance commande de sorte qu'elle ignorera les signaux de déconnexion. Notez que les commandes peuvent définir leur propre réponse aux déconnexions, en surchargeant nohup. Sans argument (permis uniquement dans un script shell), indique au shell d'ignorer les signaux HANGUP pour le restant du script. Voyez également Traitement des signaux et la commande intégrée hup.
notify [%travail ...]
Indique au shell d'avertir l'utilisateur de façon asynchrone quand le statut de l'un des travaux spécifiés (ou, sans %travail, de celui du travail courant) change, au lieu d'attendre jusqu'à l'invite suivante comme c'est le cas habituellement. travail peut être un numéro, une chaîne de caractères, la chaîne vide, « + » ou « - » comme décrit dans Travaux. Voyez également la variable shell notify.
Contrôle l'action du shell lors des interruptions. Sans argument, restaure l'action par défaut du shell lors des interruptions, c.-à-d. de terminer les scripts shell ou de retourner au niveau de l'entrée de commande du terminal. Avec « - », ignore toutes les interruptions. Avec étiquette, indique au shell d'exécuter un « goto étiquette » quand une interruption est reçue, ou qu'un processus fils se termine parce qu'il a été interrompu.
onintr est ignoré si le shell a été lancé détaché ou depuis un des fichiers de démarrage du système (voyez FICHIERS), où les interruptions sont désactivées de toute façon.
Sans argument, dépile la pile de répertoires et revient au nouveau répertoire du sommet. Avec un nombre, « +n », élimine la n-ième entrée de la pile.
Finalement, toutes les formes de popd affichent la pile de répertoires finale, tout comme dirs. La variable shell pushdsilent peut être définie pour éviter cela, et le drapeau -p peut être donné pour surcharger pushdsilent. Les drapeaux -l, -n et -v ont le même effet sur popd que sur dirs. (+)
Affiche le nom et la valeur de toutes les variables d'environnement ou, avec nom, la valeur de la variable d'environnement nom.
Sans argument, intervertit les deux éléments situés au sommet de la pile de répertoires. Si pushdtohome est définie, pushd sans argument effectue « pushd ~ », comme cd. (+) Avec nom, empile le répertoire de travail courant sur la pile de répertoires et va en nom. Si nom est « - », il est interprété comme étant le répertoire de travail courant précédent (voyez Substitution des noms de fichiers). (+) Si dunique est définie, pushd supprime toutes les instances de nom de la pile avant de l'empiler. (+) Avec un nombre « +n », pivote le n-ième élément de la pile de répertoires pour qu'il soit l'élément du sommet, et y aller. Néanmoins, si dextract est définie, « pushd +n » extraira le n-ième répertoire, l'empilera sur le sommet de la pile et s'y rendra. (+)
Finalement, toutes les formes de pushd affichent la pile de répertoires finale, tout comme dirs. La variable shell pushdsilent peut être définie pour empêcher cela et le drapeau -p peut être fourni pour surcharger pushdsilent. Les drapeaux -l, -n et -v ont le même effet sur pushd que sur dirs. (+)
Force la régénération de la table de hachage interne du contenu des répertoires. Ceci est nécessaire si de nouvelles commandes sont ajoutées aux répertoires de path pendant que vous êtes connecté. Cela ne devrait être nécessaire que si vous ajoutez des commandes à l'un de vos propres répertoires, ou si un programmeur système modifie le contenu de l'un des répertoires du système. Vide également le cache des répertoires personnels construit par le développement du tilde.
La commande spécifiée, qui est soumise aux mêmes restrictions que la commande dans l'instruction if à une ligne au-dessus, est exécutée nombre fois. Les redirections d'E/S se produisent exactement une fois, même si nombre vaut 0.
Fixe le nœud racine à //nœud-racine de sorte que « / » sera interprété comme « //nœud-racine ». (Domain/OS uniquement)

sched (+)
sched [+]hh:mm commande (+)

La première forme affiche la liste d'événements programmés. La variable shell sched peut être définie pour fournir le format dans lequel la liste d'événements programmés est affichée. La deuxième forme ajoute commande à la liste d'événements programmés. Par exemple,
> sched 11:00 echo Il est onze heures.

indique au shell de produire en écho « Il est onze heures. » à 11h00. L'heure peut être dans le format 12 heures AM/PM

> sched 5pm set prompt='[%h] Il est 5 heures passées ; retourne à la maison: >'

ou peut être relative à l'heure courante :

> sched +2:15 /usr/lib/uucp/uucico -r1 -sother

Une spécification d'heure relative ne peut pas utiliser le format AM/PM. La troisième forme supprime l'élément n de la liste d'événements :

> sched
1 Wed Apr 4 15:42 /usr/lib/uucp/uucico -r1 -sother
2 Wed Apr 4 17:00 set prompt=[%h] Il est 5 heures passées ; retourne à la maison: >
> sched -2
> sched
1 Wed Apr 4 15:42 /usr/lib/uucp/uucico -r1 -sother

Une commande de la liste d'événements programmés est exécutée juste avant que la première invite ne soit affichée, et après le moment où la commande a été programmée. Il est possible de rater l'heure exacte quand la commande doit être lancée, mais une commande en retard s'exécutera à la prochaine invite. Une commande qui vient à échéance pendant que le shell attend une entrée de l'utilisateur est exécutée immédiatement. Néanmoins, l'exécution normale d'une commande en cours d'exécution ne sera pas interrompue afin qu'un élément de la liste d'événements programmés puisse être exécuté.

Ce mécanisme est similaire, mais pas identique à la commande at(1) sur certains systèmes Unix. Son désavantage majeur est qu'il ne peut pas lancer une commande au moment exactement spécifié. Son avantage principal est que, puisque sched est exécuté directement à partir du shell, il a accès aux variables shell et aux autres structures. Cela fournit un mécanisme de modification de son environnement de travail en fonction de l'heure de la journée.

set
set nom ...
set nom=mot ...
set [-r] [-f|-l] nom=(liste-mots) ... (+)
set nom[indice]=mot ...
set -r (+)
set -r nom ... (+)

La première forme de la commande affiche la valeur de toutes les variables shell. Les variables contenant plus d'un mot sont affichées en tant que liste de mots parenthésée. La deuxième forme affecte la chaîne de caractères vide à nom. La troisième forme affecte le mot à nom. La quatrième forme affecte la liste de mots de liste-mots à nom. Dans tous les cas, la valeur subit le développement des commandes et des noms de fichiers. Si -r est spécifié, la valeur est en lecture seule. Si -f ou -l sont spécifiés, ne définit que des mots uniques conservant leur ordre. -f préfère la première occurrence d'un mot, et -l la dernière. La cinquième forme affecte le indice-ième composant de nom à mot ; ce composant doit déjà exister. La sixième forme liste les noms (uniquement) de toutes les variables shell qui sont accessibles en lecture seule. La septième forme rend nom accessible en lecture seule, qu'il ait ou non une valeur. La huitième forme est identique à la troisième forme, mais rend nom accessible en lecture seule en même temps.
Ces arguments peuvent être répétés pour définir et/ou placer en lecture seule plusieurs variables dans une unique commande set. Notez néanmoins que le développement des variables se produit pour tous les arguments avant que le moindre réglage ne se produise. Remarquez également que « = » peut être adjacent à la fois à nom et à mot, ou bien être séparé des deux par des caractères d'espacement, mais ne peut être adjacent qu'à un seul des deux. Voyez également la commande intégrée unset.
Sans argument, affiche le nom et la valeur de toutes les variables d'environnement. Étant donné nom, donner cette valeur à la variable d'environnement nom, ou la chaîne vide si aucune valeur n'est mentionnée.
Équivalent à setpath(1). (Mach uniquement)
Fixe le chemin d'exécution du système. (TCF uniquement)
Dire au shell de croire que la capacité de terminal cap (comme définie dans termcap(5)) possède la valeur valeur. Aucun contrôle n'est effectué. Les utilisateurs de terminaux Concept pourraient devoir effectuer un « settc xn no » pour obtenir une disposition (NdT : wrapping) adéquate de la colonne la plus à droite.
Contrôle quels modes de tty (voyez Gestion des terminaux) le shell ne permet pas de modifier. -d, -q ou -x indiquent à setty d'agir sur les ensembles de modes tty « edit », « quote » ou « execute » respectivement ; sans -d, -q ou -x, « execute » est utilisé.
Sans autre argument, setty liste les modes de l'ensemble choisi qui sont utilisés (« +mode ») ou pas (« -mode »). Les modes disponibles, et donc l'affichage, varient d'un système à l'autre. Avec -a, liste tous les modes tty de l'ensemble choisi qu'ils soient utilisés ou non. Avec +mode, -mode ou mode, utilise mode ou pas ou supprime le contrôle de mode dans l'ensemble choisi. Par exemple, « setty +echok echoe » active le mode « echok » et permet aux commandes d'activer ou de désactiver le mode « echoe » quand le shell exécute des commandes.
Fixe le préfixe de version expérimentale à chaîne_caractères, ou le supprime si la chaîne_caractères est omise. (TCF uniquement)
Sans argument, élimine argv[1] et décale les membres de argv vers la gauche. C'est une erreur pour argv de ne pas être définie ou d'avoir moins d'un mot pour valeur. Avec variable, effectue la même chose sur variable.
Le shell lit et exécute les commandes provenant de nom. Les commandes ne sont pas placées dans la liste d'historique. Si des arguments sont fournis, ils sont placés dans argv. (+) Les commandes source peuvent être imbriquées ; si elles sont imbriquées trop profondément, le shell peut tomber à court de descripteurs de fichiers. Une erreur dans un source à n'importe quel niveau termine toutes les commandes source imbriquées. Avec -h, les commandes sont placées dans la liste d'historique au lieu d'être exécutées, un peu comme avec « history -L ».
Stoppe les travaux ou processus spécifiés qui sont en cours d'exécution en arrière-plan. travail peut être un nombre, une chaîne de caractères, la chaîne vide, « + » ou « - » comme décrit dans Travaux. Il n'y a aucun travail par défaut ; le simple fait de taper « stop » ne stoppe pas le travail courant.
Suspend le shell, comme s'il avait reçu un signal d'arrêt avec ^Z. C'est utilisé la plupart du temps pour stopper les shells démarrés avec su(1).

switch (chaîne_caractères)
case str1:

...
breaksw

...

default:

...
breaksw
Chaque étiquette case est successivement comparée à la chaîne_caractères spécifiée, qui subit d'abord le développement des commandes et des noms de fichiers. Les métacaractères de fichiers « * », « ? » et « [...] » peuvent être utilisés dans les étiquettes case, qui subissent le développement des variables. Si aucune des étiquettes ne convient avant qu'une étiquette « default » soit trouvée, alors l'exécution commence après l'étiquette default. Chaque étiquette case et l'étiquette default doivent apparaître au début d'une ligne. La commande breaksw provoque la reprise de l'exécution après le endsw. Sinon, le contrôle passe au travers des étiquettes case et de l'étiquette default, comme en C. Si aucune étiquette ne convient et qu'il n'y a pas d'étiquette default, l'exécution continue après le endsw.
Liste les valeurs de toutes les capacités de terminaux (voyez termcap(5)).
time [commande]
Exécute commande (qui doit être une commande simple, c.-à-d. pas un alias, un tube, une liste de commandes ou une liste de commandes parenthésée) et affiche un résumé temporel comme décrit dans la variable time. Si nécessaire, un shell supplémentaire est créé pour afficher les statistiques de temps quand la commande se termine. Sans commande, affiche un résumé temporel pour le shell courant et ses enfants.
Fixe le masque de création de fichier à valeur, qui est fourni en octal. Les valeurs habituelles pour le masque sont 002, donnant tous les droits d'accès au groupe et les droits de lecture et d'exécution pour les autres utilisateurs, et 022, donnant l'accès en lecture et en exécution au groupe et aux autres utilisateurs. Sans valeur, affiche le masque actuel de création de fichier.

Supprime tous les alias dont le nom correspond au motif. « unalias * » supprime donc tous les alias. Il n'est pas erroné de ne rien unaliaser.
Supprime toutes les complètements dont le nom correspond à motif. « uncomplete * » supprime donc tous les complètements. Il n'est pas erroné de ne rien uncompleter.
Désactiver l'utilisation de la table de hachage interne servant à accélérer la localisation des programmes à exécuter.
Fixer l'univers à univers. (Masscomp/RTU uniquement)
Supprime la limitation sur la ressource ou, si aucune ressource n'est spécifiée, sur toutes les limitations de ressources. Avec -h, les limites impératives correspondantes sont supprimées. Seul le super-utilisateur peut faire cela.
Supprime toutes les variables dont le nom correspond à motif, sauf si elles sont accessibles en lecture seule. « unset * » supprime donc toutes les variables à moins qu'elles ne soient accessibles en lecture seule ; c'est une mauvaise idée. Il n'est pas erroné de ne rien unseter.
Supprime toutes les variables d'environnement dont le nom correspond à motif. « unsetenv * » supprime donc toutes les variables d'environnement ; c'est une mauvaise idée. Il n'est pas erroné de ne rien unsetenver.
Sans argument, affiche la valeur de SYSTYPE. Avec type-système, fixe SYSTYPE à type-système. Avec type-système et commande, exécute commande sous type-système. type-système peut être « bsd4.3 » ou « sys5.3 ». (Domain/OS uniquement)
Le shell attend la terminaison de tous les travaux tournant en arrière-plan. Si le shell est interactif, une interruption suspendra l'attente et forcera le shell à afficher les nom et numéro de travail de tous les travaux en suspens.
Fixer l'univers à univers. (Convex/OS uniquement)
Un nom alternatif pour la commande intégrée log. Disponible uniquement si le shell a été compilé de cette façon ; voyez la variable shell version.
Rapporte toutes les instances connues de commande, incluant les alias, les commandes intégrées et les exécutables situés dans le path.
Affiche la commande qui sera exécutée par le shell après les substitutions, la recherche dans le path, etc. La commande intégrée est identique à which(1), mais elle rapporte correctement les alias tcsh et les commandes intégrées, et est de 10 à 100 fois plus rapide. Voyez également la commande d'éditeur which-command.

while (expr)
...

Exécute les commandes situées entre le while et le end correspondant. while expr (une expression, comme décrit dans Expressions) est évaluée à une valeur non nulle. while et end doivent apparaître seuls sur leur ligne d'entrée. break et continue peuvent être utilisés pour terminer l'itération courante ou passer à l'itération suivante respectivement. Si l'entrée est un terminal, l'utilisateur verra une invite la première fois qu'il rentre dans la boucle comme pour foreach.

Alias spéciaux (+)

S'ils sont définis, chacun de ces alias s'exécute automatiquement au moment indiqué. Initialement, ils sont ne sont pas définis.

S'exécute quand le shell essaie de faire retentir la sonnette du terminal.
S'exécute après chaque changement de répertoire de travail. Par exemple, si l'utilisateur travaille dans un système X Window utilisant xterm(1) et un gestionnaire de fenêtres qui supporte les barres de titre comme twm(1), et tape
> alias cwdcmd 'echo -n "^[]2;${HOST}:$cwd ^G"'

alors le shell modifiera le titre de la xterm(1) en cours d'exécution pour qu'il soit celui du nom de l'hôte, un signe deux-points, et le répertoire de travail courant complet. Une manière plus imaginative de faire cela est

> alias cwdcmd 'echo -n "^[]2;${HOST}:$cwd^G^[]1;${HOST}^G"'

Cela placera le nom de l'hôte et le répertoire de travail sur la barre de titre, mais uniquement le nom de l'hôte dans le menu du gestionnaire d'icônes.

Notez que le placement d'un cd, pushd ou popd dans cwdcmd peut provoquer une boucle infinie. L'auteur pense que celui qui fait cela n'aura que ce qu'il mérite.

S'exécute après l'exécution de chaque commande, ou quand la commande change d'état. C'est similaire à postcmd, mais cela n'affiche pas les commandes intégrées. Avec
> alias jobcmd 'echo -n "^[]2\;\!#^G"'

l'exécution de vi foo.c placera la chaîne de commande dans la barre de titre de la xterm.

Invoqué par la commande d'éditeur run-help. Le nom de la commande pour laquelle on recherche de l'aide est passé comme seul argument. Par exemple, si l'on fait
> alias helpcommand '\!:1 --help'

alors l'affichage d'aide de la commande elle-même sera invoqué, en utilisant la convention d'appel d'aide GNU. Actuellement, il n'y a pas de manière facile de traiter les différentes conventions d'appel (p.ex. le « -h » coutumier de Unix), sauf en utilisant une table comportant beaucoup de commandes.

S'exécuter toutes les tperiod minutes. Cela fournit un moyen pratique pour vérifier l'apparition de changements communs mais non fréquents comme un nouvel email. Par exemple, si l'on fait
> set tperiod = 30
> alias periodic checknews

alors le programme checknews(1) se lancera toutes les 30 minutes. Si periodic est définie mais que tperiod ne l'est pas ou vaut 0, periodic se comporte comme precmd.

S'exécute juste avant l'affichage de l'invite. Par exemple, si l'on fait
> alias precmd date

alors date(1) s'exécutera juste avant que le shell ne fournisse l'invite de commandes. Il n'y a pas de limites sur ce que peut valoir precmd, mais il faudrait agir avec discernement.

S'exécute avant que chaque commande ne soit exécutée.
> alias postcmd 'echo -n "^[]2\;\!#^G"'

Ensuite, l'exécution de vi foo.c placera la chaîne de commande dans la barre de titre de la xterm.

Spécifie l'interpréteur pour les scripts qui ne spécifient pas eux-mêmes d'interpréteur. Le premier mot devrait être un nom de chemin complet menant à l'interpréteur désiré (p.ex. « /bin/csh » ou « /usr/local/bin/tcsh »).

Variables shell spéciales

Les variables décrites dans cette section ont une signification spéciale pour le shell.

Le shell règle addsuffix, argv, autologout, command, echo_style, edit, gid, group, home, loginsh, oid, path, prompt, prompt2, prompt3, shell, shlvl, tcsh, term, tty, uid, user et version au démarrage ; elles ne sont pas modifiées par après à moins de l'être par l'utilisateur. Le shell met à jour cwd, dirstack, owd et status quand cela est nécessaire, et règle logout à la déconnexion.

Le shell synchronise afsuser, group, home, path, shlvl, term et user avec les variables d'environnement du même nom : chaque fois que la variable d'environnement change, le shell modifie la valeur de la variable shell équivalente pour qu'elle corresponde (à moins que la variable shell soit accessible en lecture seule) et inversement. Notez que bien que cwd et PWD aient une signification identique, elles ne sont pas synchronisées de cette manière, et que le shell interconvertit automatiquement les différents formats de path et PATH.

Si elle est définie, le complètement des noms de fichiers ajoute un « / » à la fin des répertoires et une espace à la fin des fichiers normaux quand ils correspondent exactement. Définie par défaut.
Si elle est définie, la fonctionnalité de verrouillage automatique de autologout utilise sa valeur au lieu du nom d'utilisateur local pour l'authentification kerberos.
Si elle est définie, toutes les heures sont affichées dans le format 12 heures AM/PM.
Les arguments passés au shell. Les paramètres positionnels sont extraits à partir d'argv, p.ex. « $1 » est remplacé par « $argv[1] », etc. Définie par défaut, mais habituellement vide dans les shells interactifs.
Si elle est définie, la commande d'éditeur spell-word est invoquée automatiquement avant chaque tentative de complètement.
Si elle est définie, la commande d'éditeur expand-history est invoquée automatiquement avant chaque tentative de complètement.
Si elle est définie, les possibilités sont listées après un complètement ambigu. Si elle vaut « ambiguous », les possibilités ne sont listées que lorsqu'aucun caractère n'a été ajouté par le complètement.
Le premier mot est le nombre de minutes d'inactivité avant la déconnexion automatique. Le second mot optionnel est le nombre de minutes d'inactivité avant le verrouillage automatique. Quand le shell se déconnecte automatiquement, il affiche « auto-logout », fixe la variable logout à « automatic » et se termine. Quand le shell se verrouille automatiquement, l'utilisateur est requis pour entrer son mot de passe afin de pouvoir continuer à travailler. Cinq tentatives incorrectes résultent en une déconnexion automatique. Fixée à « 60 » (déconnexion automatique après 60 minutes, et aucun verrouillage) par défaut dans les shells de connexion et super-utilisateurs, mais pas si le shell pense tourner dans un système de fenêtrage (c.-à-d. si la variable d'environnement DISPLAY est définie), si le tty est un pseudo-tty (pty) ou si le shell n'a pas été compilé pour que cela soit le cas (voyez la variable shell version). Voyez également les variables shell afsuser et logout.
Si elle est définie, les backslashs (« \ ») protègent toujours « \ », « ' », et « " ». Cela peut simplifier les tâches de protection complexes, mais engendrer des erreurs de syntaxe dans les scripts csh(1).
Le nom de fichier du catalogue de messages. S'il est défini, tcsh utilise le catalogue de messages « tcsh.${catalog} » au lieu du celui employé par défaut (« tcsh »).
Une liste de répertoires dans laquelle cd devrait rechercher les sous-répertoires s'ils ne sont pas trouvés dans le répertoire courant.
Si elle est définie, active l'affichage de la couleur pour la commande intégrée ls-F et passe --color=auto à ls. Alternativement, elle peut être définie uniquement pour ls-F ou pour ls afin de n'activer la couleur que pour une seule commande. La fixer à rien équivaut à la fixer à (ls-F ls).
Si elle est définie, active les séquences d'échappement de couleur pour les fichiers de messages du NLS, et affiche des messages NLS très colorés.
Si elle est définie, la commande qui a été passée au shell avec le drapeau -c.
Si elle 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 les tirets et caractères de soulignement comme étant équivalents.
continue (+)
Si elle est définie en une liste de commandes, le shell continuera les commandes listées, au lieu d'en démarrer une nouvelle.
Comme continue, mais le shell exécutera :
echo `pwd` $argv > ~/.<nom-commande>_pause; %<nom-commande>
Si elle vaut « cmd », les commandes subiront automatiquement la correction orthographique. Si elle vaut « complete », les commandes seront automatiquement complétées. Si elle vaut « all », la ligne de commandes entière est corrigée.
Le nom de chemin complet du répertoire courant. Voyez également les variables shell dirstack et owd.
Si elle est définie, « pushd +n » extrait le n-ème répertoire de la pile de répertoires plutôt que de le faire pivoter jusqu'au sommet.
L'emplacement par défaut dans lequel « dirs -S » et « dirs -L » recherchent un fichier d'historique. Si elle n'est pas définie, ~/.cshdirs est utilisé. Puisque seul ~/.tcshrc est normalement utilisé comme source avant ~/.cshdirs, dirsfile devrait être définie dans ~/.tcshrc plutôt que dans ~/.login.
Un tableau de tous les répertoires de la pile de répertoires. « $dirstack[1] » est le répertoire de travail courant, « $dirstack[2] » le premier répertoire sur la pile, etc. Notez que le répertoire de travail courant est « $dirstack[1] » mais « =0 » dans les substitution de pile de répertoires, etc. On peut modifier la pile arbitrairement en réglant dirstack, mais le premier élément (le répertoire de travail courant) est toujours correct. Voyez également les variables shell cwd et owd.
Si elle vaut « euc », active l'affichage et l'édition du code EUC-kanji (japonais). Si elle vaut « sjis », active l'affichage et l'édition du code Shift-JIS (japonais). Si elle vaut « big5 », active l'affichage et l'édition du code Shift-JIS (chinois). Si elle vaut « utf8 », active l'affichage et l'édition du code Shift-JIS (Unicode). Si elle vaut le format suivant, active l'affichage et l'édition du format de code original multi-octets :
> set dspmbyte = 0000....(256 bytes)....0000

La table requiert seulement 256 octets. Chacun des 256 caractères correspond (de gauche à droite) aux codes ASCII 0x00, 0x01 ... 0xff. Chaque caractère est fixé au nombre 0, 1, 2 ou 3. Les nombres possèdent les significations suivantes :
0 ... pas utilisé pour les caractères multi-octets.
1 ... utilisé pour le premier octet d'un caractère multi-octets.
2 ... utilisé pour le deuxième octet d'un caractère multi-octets.
3 ... utilisé à la fois pour le premier et le second octet d'un caractère multi-octets.


Exemple:
Si elle vaut « 001322 », le premier caractère (c.-à-d. le 0x00 du code ASCII) et le deuxième caractère (c.-à-d. le 0x01 du code ASCII) sont fixés à « 0 ». Ensuite, elle n'est pas utilisée par les caractères multi-octets. Le 3ème caractère (0x02) est fixé à « 2 », pour indiquer qu'il est utilisé comme premier octet d'un caractère multi-octets. Le 4ème caractère (0x03) est fixé à « 3 ». Il est utilisé à la fois pour le premier et le deuxième octet d'un caractère multi-octets. Les 5ème et 6ème caractères (0x04, 0x05) sont fixés à « 2 », pour indiquer qu'ils sont utilisés pour le deuxième octet d'un caractère multi-octets.

La version GNU fileutils de ls ne peut pas afficher des noms de fichiers multi-octets sans l'option -N ( --literal ). Si vous utilisez cette version, fixez le second mot de dspmbyte à « ls ». Sinon, par exemple, « ls-F -l » ne pourra pas afficher les noms de fichiers multi-octets.


Note:
Cette variable ne peut être utilisée que si KANJI ou DSPMBYTE a été définie au moment de la compilation.

Si elle est définie, pushd supprime toutes les instances de nom de la pile avant de l'empiler.
Si elle est définie, chaque commande avec ses arguments est renvoyée en écho juste avant d'être exécutée. Pour les commandes non intégrées, tous les développements se produisent avant la mise en écho. Les commandes intégrées sont envoyées en écho avant la substitution des commandes et des noms de fichiers puisque ces substitutions sont ensuite faites sélectivement. Définie par l'option -x de la ligne de commandes.
Le style de la commande intégrée echo. Peut valoir

Ne pas produire en écho un saut de ligne si le premier argument est « -n ».
Reconnaître les séquences d'échappement backslashées dans les chaînes de caractères d'écho.
Reconnaître à la fois le drapeau « -n » et les séquences d'échappement backslashées ; comportement par défaut.
Ne reconnaître aucun des deux.

Fixée par défaut au style par défaut du système local. Les options BSD et System V sont décrites dans les pages de manuel de echo(1) sur les systèmes concernés.

Si elle est définie, l'éditeur de ligne de commandes est utilisé. Définie par défaut dans les shells interactifs.
Si elle est définie, les séquences d'invite « %c », « %. » et « %C » (voyez la variable shell prompt) indiquent les répertoires passés avec une ellipse (« ... ») au lieu de « /<skipped> » (passé).
Liste les suffixes de noms de fichiers à ignorer lors du complètement.
Dans tcsh, le complètement est toujours utilisé et cette variable est ignorée. Si edit n'est pas définie, alors le complètement csh traditionnel est utilisé. Si elle est définie dans csh, le complètement des noms de fichiers est utilisé.
L'ID de groupe réel de l'utilisateur.
Le nom de groupe de l'utilisateur.
Une valeur de type chaîne de caractères déterminant les caractères utilisés dans la Substitution d'historique. Le premier caractère de sa valeur est utilisé comme caractère de substitution d'historique, remplaçant le caractère par défaut « ! ». Le second caractère de sa valeur remplace le caractère « ^ » dans les substitutions rapides.
Contrôle le traitement des entrées dupliquées dans la liste d'historique. Si elle vaut « all », seuls les événements d'historique uniques sont insérés dans la liste d'historique. Si elle vaut « prev » et que le dernier événement d'historique est identique à la commande courante, alors la commande courante n'est pas insérée dans l'historique. Si elle vaut « erase » et que le même événement est trouvé dans la liste d'historique, cet ancien événement est effacé et l'événement courant est inséré. Notez que les options « prev » et « all » renumérotent les événements d'historique afin qu'il n'y ait pas de trous.
L'emplacement par défaut dans lequel « history -S » et « history -L » recherchent un fichier d'historique. S'il n'est pas défini, ~/.history est utilisé. histfile est utile quand on partage le même répertoire personnel entre différentes machines, ou quand on sauvegarde des historiques séparés sur des terminaux différents. Puisque seul ~/.tcshrc est normalement utilisé comme source avant ~/.history, histfile devrait être définie dans ~/.tcshrc plutôt que dans ~/.login.
Si elle est définie, les commandes intégrées et d'éditeur et le mécanisme savehist utilisent la forme littérale (non développée) des lignes dans la liste d'historique. Voyez également la commande d'éditeur toggle-literal-history.
Le premier mot indique le nombre d'événements d'historique à sauvegarder. Le second mot optionnel (+) indique le format dans lequel l'historique est affiché ; s'il n'est pas fourni, « %h\t%T\t%R\n » est utilisé. Les séquences de format sont décrites dans prompt ; notez la signification variable de « %R ». Fixée à « 100 » par défaut.
Initialisé au répertoire personnel de l'appelant. Le développement de nom de fichier « ~ » se réfère à cette variable.
Si elle vaut la chaîne de caractères vide ou « 0 » et que le périphérique d'entrée est un terminal, la commande end-of-file (habituellement générée par l'utilisateur en tapant « ^D » sur une ligne vide) indique au shell d'afficher « Use "exit" to leave tcsh. » (Utilisez exit pour quitter tcsh) au lieu de se terminer. Cela empêche que le shell soit tué accidentellement. Si elle vaut un nombre n, le shell ignorera n - 1 end-of-files consécutifs et se terminera au n-ième. (+) Si elle n'est pas définie, « 1 » est utilisé, c.-à-d que le shell se termine sur un simple « ^D ».
Si elle est définie, le shell traite un nom de répertoire tapé comme une commande comme si cela avait été une requête de déplacement dans ce répertoire. Si elle vaut verbose, le changement de répertoire est produit en écho sur la sortie standard. Ce comportement est inhibé dans les scripts shell non interactifs, ou pour les chaînes de caractères de commande de plus d'un mot. Le changement de répertoire a priorité sur l'exécution d'une commande nommée d'une façon similaire, mais cela est effectué après la substitution des alias. Le développement du tilde et des variables fonctionnent comme prévu.
Si elle vaut « insert » ou « overwrite », place l'éditeur dans ce mode d'entrée au début de chaque ligne.
Contrôle le traitement des entrées dupliquées dans l'anneau des parties supprimées (kill ring). Si elle vaut « all », seules les chaînes uniques sont entrées dans l'anneau. Si elle vaut « prev » et que la dernière chaîne supprimée est identique à la chaîne actuellement supprimée, alors la chaîne courante n'est pas entrée dans l'anneau. Si elle vaut « erase » et que la même chaîne est trouvée dans l'anneau, l'ancienne chaîne est effacée et la chaîne courante est insérée.
Indique le nombre de chaînes supprimées à garder en mémoire. Vaut « 30 » par défaut. Si elle n'est pas définie ou vaut moins de « 2 », le shell ne conservera que la chaîne la plus récemment supprimée.
Si elle vaut « x », « a » ou « A », ou n'importe quelle combinaison d'entre eux (p.ex. « xA »), ils sont utilisés comme options pour ls-F, le faisant agir comme « ls -xF », « ls -Fa », « ls -FA » ou une combinaison (p.ex. « ls -FxA ») : « a » affiche tous les fichiers (même s'ils débutent par un « . »), « A » montre tous les fichiers sauf « . » et « .. », et « x » trie en lignes plutôt qu'en colonnes. Si le second mot de listflags est défini, il est utilisé comme chemin pour « ls(1) ».
Si elle est définie, tous les travaux sont listés quand un travail est suspendu. Si elle vaut « long », le listage est dans le format long.
Si elle est définie, la commande intégrée ls-F affiche le type du fichier vers lequel chaque lien symbolique pointe.
Le nombre maximal d'éléments que la commande d'éditeur list-choices listera sans rien demander au préalable.
Le nombre maximal de rangées d'éléments que la commande d'éditeur list-choices listera sans rien demander au préalable.
Définie par le shell s'il n'est pas un shell de connexion. Sa définition ou la suppression de sa définition à l'intérieur d'un shell n'a aucun effet. Voyez également shlvl.
logout (+)
Fixée par le shell à « normal » avant une déconnexion normale, « automatic » avant une déconnexion automatique, et « hangup » si le shell a été tué par un signal de déconnexion (HANGUP, voyez Traitement des signaux). Voyez également la variable shell autologout.
Le nom des fichiers ou répertoires à vérifier pour un email entrant, séparés par des espaces, et éventuellement précédés d'un mot numérique. Avant chaque invite, si 10 minutes se sont écoulées depuis la dernière vérification, le shell vérifie chaque fichier et dit « You have new mail. » (Vous avez du courrier) ou, si mail contient plusieurs fichiers, « You have new mail in nom. », si la taille du fichier est plus grande que zéro et possède une date de modification plus récente que sa date de dernier accès.

Si vous êtes dans un shell de connexion, alors aucun fichier de mail n'est rapporté à moins qu'il n'ait été modifié après le moment du démarrage du shell, afin d'éviter des notifications redondantes. La plupart des programmes de connexion vous disent si vous avez reçu ou pas de nouveaux emails quand vous vous connectez.

Si un fichier spécifié dans mail est un répertoire, le shell comptera chaque fichier de ce répertoire comme un message séparé, et rapportera « You have n mails. » ou « You have n mails in nom. » (vous avez n emails (dans)) adéquatement. Cette fonctionnalité est fournie pour les systèmes qui stockent les mails de cette manière, comme le Andrew Mail System.

Si le premier mot de mail est numérique, il est employé comme intervalle de vérification des mails, en secondes.

Dans de très rares circonstances, le shell peut rapporter « You have mail. » au lieu de « You have new mail.'

Si elle vaut « never », le complètement ne bippe jamais. Si elle vaut « nomatch », tcsh bippe uniquement quand il n'y a pas de correspondance. Si elle vaut « ambiguous », il bippe quand il y a de multiples correspondances. Si elle vaut « notunique », il bippe quand il y a a une correspondance exacte et d'autres plus longues. Si elle n'est pas définie, « ambiguous » est utilisé.
Si elle est définie, la sonnerie est totalement désactivée. Voyez également visiblebell.
Si elle est définie, des restrictions sont placées sur la redirection de sortie pour s'assurer que des fichiers ne seront pas accidentellement détruits et que les redirections « >> » se réfèrent à des fichiers existants, comme décrit dans la section Entrée/sortie.
Si elle est définie, désactive l'affichage de « DING! » dans les spécificateurs temporels de prompt au moment du changement d'heure.
Si elle est définie, les Substitution des noms de fichiers et les Substitutions de pile de répertoires sont inhibés. C'est le plus utile dans les scripts shell qui ne s'occupent pas des noms de fichiers, ou après qu'une liste de noms de fichiers ait été obtenue, et que des développements supplémentaires ne sont pas désirables.
Si elle est définie et que le shell supporte le Kanji (voyez la variable shell version), elle est désactivée afin que la touche méta puisse être utilisée.
Si elle est définie, une Substitution de noms de fichiers ou une Substitutions de pile de répertoires qui ne correspond à aucun fichier existant n'est pas transformée plutôt que de causer une erreur. Il est toujours erroné pour la substitution d'être mal formée ; p.ex. « echo [ » donne toujours une erreur.
Une liste de répertoires (ou des motifs génériques correspondant à des répertoires, voyez Substitution des noms de fichiers) qui ne devrait pas être stat(2)ée lors d'une opération de complètement. Cela est habituellement nécessaire pour exclure des répertoires pour lesquels stat(2) prendrait trop de temps, comme par exemple /afs.
Si elle est définie, le shell annonce l'achèvement des travaux de façon asynchrone. Le comportement par défaut est de présenter les achèvements des travaux juste avant d'afficher une invite.
L'ID d'organisation réel de l'utilisateur. (Domain/OS uniquement)
L'ancien répertoire de travail, équivalent au « - » utilisé par cd et pushd. Voyez également les variables shell cwd dirstack.
Une liste de répertoire dans lesquels rechercher les commandes exécutables. Un mot vide spécifie le répertoire courant. S'il n'y a pas de variable path, alors seuls les noms de chemin complet s'exécuteront. path est définie par le shell au démarrage à partir de la variable d'environnement PATH ou, si PATH n'existe pas, vaudra un chemin par défaut dépendant du système comme p.ex. "(/usr/local/bin /usr/bsd /bin /usr/bin .)". Le shell peut placer « . » en premier ou en dernier lieu dans path ou l'omettre entièrement en fonction de la façon dont il a été compilé ; voyez la variable shell version. Un shell qui n'a reçu ni l'option -c ni l'option -t hache le contenu des répertoires de path après avoir lu ~/.tcshrc et à chaque fois que path est réinitialisé. Si l'on ajoute une nouvelle commande dans un répertoire présent dans path alors que le shell est actif, on pourrait devoir faire un rehash pour que le shell la trouve.
Si elle est définie et qu'un programme interactif se termine avec une valeur de retour non nulle, le shell affiche « Exit status ».
La chaîne de caractères (l'invite) qui est affichée avant de lire chaque commande du terminal. prompt peut inclure n'importe laquelle des séquences de formatage suivantes (+), qui sont remplacées par les informations fournies :

%/
Le répertoire de travail courant.
%~
Le répertoire de travail courant, mais où le répertoire personnel de l'utilisateur est représenté par « ~ » et les répertoires personnels des autres utilisateurs sont représentés par « ~utilisateur » comme dans la Substitution des noms de fichiers. La substitution « ~utilisateur » ne se produit que si le shell a déjà utilisé « ~utilisateur » dans un nom de chemin dans la session courante.
%c[[0]n], %.[[0]n]
Le composant de queue du répertoire de travail courant, ou n composants de queue si un chiffre n est donné. Si n commence par « 0 », le nombre de composants passés précède le ou les composants de queue dans le format « /<passés>en-queue ». Si la variable shell ellipsis est définie, les composants passés sont représentés par une ellipse afin que le tout devienne « ...en-queue ». La substitution « ~ » est effectuée comme dans « %~ » au-dessus, mais le composant « ~ » est ignoré lors du comptage de composants d'en-queue.
%C
Comme %c, mais sans la substitution du « ~ ».
%h, %!, !
Le numéro d'événement de l'historique courant.
%M
Le nom d'hôte complet.
%m
Le nom d'hôte jusqu'au premier « . ».
%S (%s)
Démarrer (stopper) le mode saillant (standout).
%B (%b)
Démarrer (stopper) le mode gras.
%U (%u)
Démarrer(arrêter) le mode de soulignement.
%t, %@
L'heure du jour dans le format 12-heures AM/PM.
%T
Comme « %t », mais dans le format 24-heures (mais voyez la variable shell ampm).
%p
L'heure « précise » dans le format 12-heures AM/PM, avec les secondes.
%P
Comme « %p », mais dans le format 24-heures (mais voyez la variable shell ampm).
\c
c est analysé comme pour bindkey.
^c
c est analysé comme pour bindkey.
%%
Un unique « % ».
%n
Le nom d'utilisateur.
%j
Le nombre de travaux.
%d
Le jour de la semaine dans le format « Jou ».
%D
Le jour dans le format « dd ».
%w
Le mois dans le format « Moi ».
%W
Le mois dans le format « mm ».
%y
L'année dans le format « aa ».
%Y
L'année dans le format « aaaa ».
%l
Le tty du shell.
%L
Efface à partir de la fin de l'invite jusqu'à la fin de l'écran, ou la fin de la ligne.
%$
Développe le nom de la variable shell ou d'environnement présente immédiatement après le « $ ».
%#
« > » (ou le premier caractère de la variable shell promptchars) pour les utilisateurs normaux, « # » (ou le second caractère de promptchars) pour le super-utilisateur.
%{chaîne_caractères%}
Inclut chaîne_caractères en tant que séquence d'échappement littérale. Cela devrait n'être utilisé que pour modifier les attributs du terminal et ne devrait pas changer l'emplacement du curseur. Cela ne peut être la dernière séquence de prompt.
%?
Le code de retour de la commande exécutée juste avant l'invite.
%R
Dans prompt2, le statut de l'analyseur syntaxique. Dans prompt3, la chaîne de caractères corrigée. Dans history, la chaîne de caractères d'historique.

« %B », « %S », « %U » et « %{chaîne_caractères%} » ne sont disponibles que dans les shells supportant les caractères 8 bits ; voyez la variable shell version.

Les séquences de gras, saillant et de soulignement sont souvent utilisées pour différencier un shell de super-utilisateur. Par exemple,

> set prompt = "%m [%h] %B[%@]%b [%/] you rang? "
tut [37] [2:54pm] [/usr/accts/sys] you rang? _

Si « %t », « %@ », « %T », « %p » ou « %P » est utilisé, et que noding n'est pas définie, alors afficher « DING! » au moment du changement d'heure (c.-à-d. les minutes « :00 ») au lieu de l'heure courante.

Fixée par défaut à « %#  » dans les shells interactifs.

La chaîne de caractères formant l'invite des boucles while et foreach, et affichée après les lignes se terminant par « \ ». Les mêmes séquences de format que celles de prompt peuvent être utilisées ; notez la signification variable de « %R ». Fixée par défaut à « %R?  » dans les shells interactifs.
La chaîne de caractères formant l'invite lors de la confirmation d'une correction orthographique automatique. Les mêmes séquences de format que celles de prompt peuvent être utilisées ; notez la signification variable de « %R ». Fixée par défaut à « CORRECT>%R (y|n|e|a)?  » dans les shells interactifs.
Si elle est définie (en une chaîne de deux caractères), la séquence de formatage « %# » de la variable shell prompt est remplacée par le premier caractère pour les utilisateurs normaux et par le second caractère pour le super-utilisateur.
Si elle est définie, pushd sans argument effectue un « pushd ~ », comme cd.
Si elle est définie, pushd et popd n'affichent pas la pile de répertoires.
Si elle est définie, le complètement complète en une correspondance exacte même si une correspondance plus longue est possible.
Si elle est définie, le listage des commandes affiche uniquement les fichiers situés dans le path qui sont exécutables. Lent.
Si elle est définie, on demande confirmation à l'utilisateur avant que « rm * » ne soit exécuté.
La chaîne de caractères à afficher du côté droit de l'écran (après l'entrée de commande) quand l'invite est affichée sur la gauche. Elle reconnaît les mêmes caractères de formatage que prompt. Elle disparaîtra et réapparaîtra automatiquement si nécessaire, pour s'assurer que l'entrée de commandes n'est pas obscurcie, et apparaîtra uniquement si l'invite, l'entrée de commande et elle-même combinées tiennent ensemble sur la première ligne. Si edit n'est pas définie, alors rprompt sera affiché après l'invite et avant l'entrée de commande.
Si elle est définie, le shell effectue un « dirs -S » avant de se terminer. Si le premier mot est un nombre, il représentera le nombre maximum d'entrées de la pile de répertoires à sauvegarder.
Si elle est définie, le shell effectue un « history -S » avant de se terminer. Si le premier mot est un nombre, au plus ce nombre de lignes seront sauvegardées. (Le nombre doit être plus petit ou égal à history.) Si le second mot est « merge », la liste d'historique est fusionnée avec le fichier d'historique existant (s'il y en a un) plutôt que de le remplacer et est triée par horodate, et les événements les plus récents sont retenus. (+)
Le format dans lequel la commande intégrée sched affiche les événements programmés ; s'il n'est pas fourni, « %h\t%T\t%R\n » est utilisé. Les séquences de format sont décrites plus haut sous prompt ; notez la signification variable de « %R ».
Le fichier dans lequel le shell réside. C'est utilisé pour forker (générer) des shells afin d'interpréter les fichiers dont les bits d'exécution sont positionnés, mais qui ne sont pas exécutables par le système. (Voyez la description dans Exécution des commandes intégrées ou pas.) Initialisé au répertoire de démarrage (dépendant du système) du shell.
Le nombre de shells imbriqués. Réinitialisé à 1 dans les shells de connexion. Voyez également loginsh.
Le statut (valeur de retour) renvoyé par la dernière commande. Si elle s'est terminée anormalement, alors 0200 est ajouté au statut. Les commandes intégrées qui échouent retournent une valeur de sortie de « 1 », toutes les autres commandes intégrées renvoient une valeur de retour de « 0 ».
Peut prendre plusieurs valeurs différentes pour contrôler la résolution des liens symboliques (« symlink ») :

Si elle vaut « chase », à chaque fois que l'on se déplace dans un répertoire contenant un lien symbolique, celui-ci est développé pour former le nom réel du répertoire pointé. Cela ne fonctionne pas pour le répertoire personnel de l'utilisateur ; c'est un bogue.

Si elle vaut « ignore », le shell essaie de construire un répertoire courant relatif au répertoire courant avant que le lien n'ait été suivi. Cela signifie qu'effectuer un cd à travers un lien symbolique et ensuite un « cd .. » revient au répertoire original. Cela n'affecte que les commandes intégrées et le complètement des noms de fichiers.

Si elle vaut « expand », le shell essaie d'arranger les liens symboliques en développant en réalité les arguments qui ressemblent à des noms de chemins. Cela affecte toutes les commandes, et pas uniquement celles qui sont intégrées. Malheureusement, cela ne fonctionne pas pour les noms de fichiers difficiles à reconnaître, comme ceux qui sont encastrés dans les options de commande. Le développement peut être évité avec le mécanisme de protection. Bien que ce réglage soit habituellement le plus pratique, il induit parfois en erreur et est déroutant quand il n'arrive pas à reconnaître un argument qui devrait être développé. Un compromis est d'utiliser « ignore » et de n'utiliser la commande d'éditeur normalize-path (liée par défaut à ^X-n) que lorsque c'est nécessaire.

Quelques exemples dans l'ordre. En premier lieu, créons quelques répertoires pour jouer :

> cd /tmp
> mkdir from from/src to
> ln -s from/src to/dest

Voici le comportement avec symlinks non définie,

> cd /tmp/to/dest; echo $cwd
/tmp/to/dest
> cd ..; echo $cwd
/tmp/from

voici le comportement avec symlinks fixée à « chase »,

> cd /tmp/to/dest; echo $cwd
/tmp/from/src
> cd ..; echo $cwd
/tmp/from

voici le comportement avec symlinks fixée à « ignore »,

> cd /tmp/to/dest; echo $cwd
/tmp/to/dest
> cd ..; echo $cwd
/tmp/to

et voici le comportement avec symlinks fixée à « expand ».

> cd /tmp/to/dest; echo $cwd
/tmp/to/dest
> cd ..; echo $cwd
/tmp/to
> cd /tmp/to/dest; echo $cwd
/tmp/to/dest
> cd ".."; echo $cwd
/tmp/from
> /bin/echo ..
/tmp/to
> /bin/echo ".."
..

Notez que le développement « expand » 1) fonctionne exactement comme « ignore » pour les commandes intégrées comme cd, 2) est évité par la protection, et 3) se produit avant que les noms de fichiers ne soient passés à des commandes non intégrées.

Le numéro de version du shell dans le format « R.VV.PP », où « R » est le numéro de publication majeur (release), « VV » la version actuelle et « PP » le niveau de patchs.
Le type de terminal. Habituellement défini dans ~/.login comme décrit dans Démarrage et arrêt.
Si elle vaut un nombre, alors la commande intégrée time s'exécute automatiquement après chaque commande qui utilise plus que ce nombre de secondes CPU. S'il y a un second mot, il est utilisé comme chaîne de caractères de format pour la sortie de la commande intégrée time. (u) Les séquences suivantes peuvent être utilisées dans la chaîne de format :

%U
Le temps que le processus a passé dans le mode utilisateur en secondes cpu.
%S
Le temps que le processus a passé dans le mode kernel (noyau) en secondes cpu.
%E
Le temps (total) écoulé en secondes.
%P
Le pourcentage d'utilisation CPU calculé par (%U + %S) / %E.
%W
Le nombre de fois que le processus a été swappé (placé en mémoire d'échange).
%X
La quantité moyenne d'espace texte (partagé) utilisée en Ko.
%D
La quantité moyenne d'espace de données/pile (non partagé) utilisée en Ko.
%K
L'espace total utilisé (%X + %D) en Ko.
%M
La mémoire maximum dont le processus ait jamais disposé en Ko.
%F
Le nombre de défauts de page majeurs (page devant être rechargée depuis le disque).
%R
Le nombre de défauts de page mineurs.
%I
Le nombre d'opérations d'entrée.
%O
Le nombre d'opérations de sortie.
%r
Le nombre de messages reçus sur une socket.
%s
Le nombre de messages envoyés sur une socket.
%k
Le nombre de signaux reçus.
%w
Le nombre de commutations de contexte volontaires (attentes).
%c
Le nombre de commutations de contexte involontaires.

Seules les quatre premières séquences sont supportées sur les systèmes ne disposant pas des fonctions de limitation de ressources BSD. Le format d'heure par défaut est « %Uu %Ss %E %P %X+%Dk %I+%Oio %Fpf+%Ww » pour les systèmes qui supportent les rapports d'utilisation des ressources et « %Uu %Ss %E %P » pour les systèmes qui n'en disposent pas.

Sous Sequent DYNIX/ptx, %X, %D, %K, %r et %s ne sont pas disponibles, mais les séquences additionnelles suivantes le sont :

%Y
Le nombre d'appels système effectués.
%Z
Le nombre de pages qui sont remplies de zéros à la demande.
%i
Le nombre de fois que la quantité de mémoire résidente (resident set size) utilisée par un processus a été augmentée par le noyau.
%d
Le nombre de fois que la quantité de mémoire résidente utilisée par un processus a été diminuée par le noyau.
%l
Le nombre d'appels système de lecture effectués.
%m
Le nombre d'appels système d'écriture effectués.
%p
Le nombre de lectures à partir de périphériques disques bruts.
%q
Le nombre d'écritures sur des périphériques disques bruts.

et le format d'heure par défaut est « %Uu %Ss $E %P %I+%Oio %Fpf+%Ww ». Notez que le pourcentage d'occupation CPU peut être plus haut que 100% sur les systèmes multi-processeurs.

La durée, en minutes, entre les exécutions de l'alias spécial periodic.
Le nom du tty, ou vide si le shell n'est attaché à aucun terminal.
L'ID d'utilisateur réel de l'utilisateur.
Le nom de connexion de l'utilisateur.
Si elle est définie, provoque l'affichage des mots de chaque commande, après la substitution d'historique (s'il y en a une). Définie par l'option de ligne de commandes -v.
L'identifiant de version. Il contient le numéro de version du shell (voyez tcsh), l'origine, la date de publication, le vendeur, le système d'exploitation et la machine (voyez VENDOR, OSTYPE et MACHTYPE) et une liste d'options séparées par des virgules qui sont fixées au moment de la compilation. Les options qui sont spécifiées par défaut dans la distribution sont également citées.

8b
Le shell supporte les caractères 8 bits ; par défaut
7b
Le shell ne supporte pas les caractères 8 bits
Le NLS du système est utilisé ; défaut pour les systèmes comportant le NLS
Les shells de connexion exécutent /etc/csh.login avant plutôt qu'après /etc/csh.cshrc et ~/.login avant plutôt qu'après ~/.tcshrc et ~/.history.
« . » est placé en dernier lieu dans le path par sécurité ; par défaut
« . » est omis du path par sécurité
l'édition de style vi est le comportement par défaut plutôt que le style d'emacs
Les shells de connexion ignorent le DTR quand ils se terminent
bye est un synonyme de logout et log est un nom alternatif pour watchlog
autologout est activé ; par défaut
Kanji est utilisé si c'est approprié en fonction des réglages de localisation, à moins que la variable shell nokanji ne soit définie
Le malloc(3) du système est utilisé
La convention « #!<programme> <args> » est émulée lors de l'exécution de scripts shell
La commande intégrée newgrp est disponible
Le shell essaie de définir la variable d'environnement REMOTEHOST
Le shell vérifie votre mot de passe via le serveur kerberos si l'authentification locale échoue. La variable shell afsuser ou la variable d'environnement AFSUSER surcharge votre nom d'utilisateur local si elle est définie.

Un administrateur peut insérer des chaînes de caractères additionnelles pour indiquer les différences dans la version locale.

Si elle est définie, un clignotement d'écran est utilisé plutôt que la sonnerie audible. Voyez aussi nobeep.
Une liste de paires utilisateur/terminal pour surveiller les connexions et déconnexions. Si l'utilisateur est « any », tous les terminaux sont surveillés pour l'utilisateur fourni et vice-versa. Définir watch à « (any any) » surveille tous les utilisateurs et terminaux. Par exemple,
set watch = (george ttyd1 any console $user any)

rapporte l'activité de l'utilisateur « george » sur ttyd1, n'importe quel utilisateur sur la console, et soi-même (ou un intrus) sur n'importe quel terminal.

Les connexions et déconnexions sont vérifiées toutes les 10 minutes par défaut, mais le premier mot de watch peut être un nombre qui indique le nombre de minutes entre chaque vérification. Par exemple,

set watch = (1 any any)

rapporte chaque connexion/déconnexion une fois par minute. Pour les impatients, la commande intégrée log déclenche un rapport watch à n'importe quel moment. Toutes les connexions actuelles sont rapportées (comme pour la commande intégrée log) quand watch est définie pour la première fois.

La variable shell who contrôle le format des rapports watch.

La chaîne de format pour les messages watch. Les séquences suivantes sont remplacées par les informations fournies :

%n
Le nom de l'utilisateur qui s'est connecté/déconnecté.
%a
L'action observée, p.ex. « logged on » (connecté), « logged off » (déconnecté) ou « replaced ancien-utilisateur on » (remplacé ancien-utilisateur).
%l
Le terminal (tty) sur lequel l'utilisateur s'est connecté/déconnecté.
%M
Le nom d'hôte complet de l'hôte distant, ou « local » si la connexion/déconnexion s'est faite sur l'hôte local.
%m
Le nom d'hôte de l'hôte distant jusqu'au premier « . ». Le nom complet est affiché si c'est une adresse IP ou un affichage du système X Window System.

%M et %m ne sont disponibles que sur les systèmes qui stockent le nom d'hôte distant dans /etc/utmp. Si elle n'est pas définie, « %n has %a %l from %m. » est utilisé, ou « %n has %a %l. » sur les systèmes qui ne stockent pas le nom d'hôte distant.

Une liste de caractères non alphanumériques qui doivent être considérés comme faisant partie d'un mot par les commandes d'éditeur forward-word, backward-word etc. Si elle n'est pas définie, « *?_-.[]~= » est utilisé.

ENVIRONNEMENT

Équivalent à la variable shell afsuser.
Le nombre de colonnes du terminal. Voyez Gestion des terminaux.
Utilisé par le Système X Window (voyez X(1)). Si elle est définie, le shell ne définit pas autologout.
Le nom du chemin vers un éditeur par défaut. Voyez également la variable d'environnement VISUAL et la commande d'éditeur run-fg-editor.
Équivalent à la variable shell group.
Équivalent à la variable shell home.
Initialisé au nom de la machine sur laquelle le shell est lancé, déterminé par l'appel système gethostname(2).
Initialisé au type de machine sur laquelle le shell est lancé, déterminé au moment de la compilation. Cette variable est obsolète est sera supprimée dans une version future.
Une liste de répertoires séparés par des « : » dans laquelle la commande d'éditeur run-help recherche la documentation sur les commandes.
Fournit l'environnement de caractères préféré. Voyez Support Système de la Langue Native.
Si définie, seul le traitement des caractères ctype est modifié. Voyez Support Système de la Langue Native.
Le nombre de lignes du terminal. Voyez Gestion des terminaux.
Le format de cette variable fait penser au format du fichier termcap(5) ; une liste d'expressions séparées par des deux-points de la forme « xx=chaîne_car », où « xx » est un nom de variable de deux caractères. Les variables avec leurs valeurs par défaut associées sont :

Texte normal (non nom de fichier)
Fichier régulier
Répertoire
Lien symbolique
Tube nommé (FIFO)
Socket
Door (NdT : ?)
Périphérique en mode bloc
Périphérique en mode caractère
Fichier exécutable
Fichier manquant (vaut fi par défaut)
Lien symbolique orphelin (vaut ln par défaut)
Code gauche
Code droit
Code de fin (remplace lc+no+rc)

Vous ne devez inclure que les variables dont vous voulez modifier la valeur par rapport à celle donnée par défaut.

Les noms de fichiers peuvent également être colorés en fonction de l'extension du nom de fichier. Cela est spécifié dans la variable LS_COLORS en utilisant la syntaxe « *ext=chaîne_car ». Par exemple, en utilisant les codes ISO 6429, pour colorer tous les fichiers sources C en bleu, vous devriez spécifier « *.c=34 ». Cela mettra en couleur tous les fichiers se terminant par .c dans la couleur bleue (34).

Les caractères de contrôle peuvent être écrits soit dans la notation d'échappement de style C, soit dans la notation ^ du style de stty. La notation du style C ajoute ^[ pour Escape, _ pour un caractère espace blanche normal, et ? pour Delete. De plus, le caractère d'échappement ^[ peut être utilisé pour surcharger l'interprétation par défaut de ^[, ^, : et =.

Chaque fichier sera écrit sous la forme <lc> <code-couleur> <rc> <nom_fichier> <ec>. Si le code <ec> n'est pas défini, la séquence <lc> <no> <RC> sera utilisée à la place. C'est généralement plus commode à utiliser, mais moins général. Les codes gauche, droite et fin sont fournis afin que vous n'ayez pas à taper à maintes reprises les parties communes et pour supporter les terminaux exotiques ; vous n'avez généralement pas besoin de les changer à moins que votre terminal n'utilise pas les séquences de couleur ISO 6429 mais un système différent.

Si votre terminal n'utilise pas les codes de couleur ISO 6429, vous pouvez composer les codes de caractères (c.-à-d. tous sauf les codes lc, rc et ec) à partir des commandes numériques séparées par des points-virgules. Les commandes les plus courantes sont :

0
pour restaurer la couleur par défaut
1
pour des couleurs plus claires
4
pour du texte souligné
5
pour du texte clignotant
30
pour un avant-plan noir
31
pour un avant-plan rouge
32
pour un avant-plan vert
33
pour un avant-plan jaune (ou brun)
34
pour un avant-plan bleu
35
pour un avant-plan violet
36
pour un avant-plan cyan
37
pour un avant-plan blanc (ou gris)
40
pour un arrière-plan blanc
41
pour un arrière-plan rouge
42
pour un arrière-plan vert
43
pour un arrière-plan jaune (ou brun)
44
pour un arrière-plan bleu
45
pour un arrière-plan violet
46
pour un arrière-plan cyan
47
pour un arrière-plan blanc (ou gris)

Les commandes ne fonctionneront pas toutes sur tous les systèmes et périphériques d'affichage.

Quelques programmes de terminaux ne reconnaissent pas correctement le code de fin par défaut. Si tout le texte est coloré après que vous ayez fait un listage de répertoire, essayez de remplacer les codes de no et fi de 0 par les codes numériques de vos couleurs standard d'avant- ou d'arrière-plan.

Le type de machine (classe de microprocesseurs ou modèle de machine), comme déterminé au moment de la compilation.
Si définie, les caractères imprimables ne sont pas re-liés à self-insert-command. Voyez Support Système de la Langue Native.
Le système d'exploitation, déterminé au moment de la compilation.
Une liste de répertoires séparés par des deux-points dans lesquels rechercher les exécutables. Équivalent à la variable shell path, mais dans un format différent.
Équivalent à la variable shell cwd, mais pas synchronisé avec elle ; mis à jour uniquement après un changement de répertoire réel.
L'hôte à partir duquel l'utilisateur s'est connecté à distance, si c'est le cas et si le shell a été capable de le déterminer. Définie uniquement si le shell a été compilé de cette façon ; voyez la variable shell version.
Équivalent à la variable shell shlvl.
Le type de système courant. (Domain/OS uniquement)
Équivalent à la variable shell term.
La chaîne de caractères de capacité du terminal. Voyez Gestion des terminaux.
Équivalent à la variable shell user.
Le vendeur, déterminé au moment de la compilation.
Le nom du chemin de l'éditeur plein écran par défaut. Voyez également la variable d'environnement EDITOR et la commande d'éditeur run-fg-editor.

FICHIERS

/etc/csh.cshrc
Lu en premier lieu par chaque shell. ConvexOS, Stellix et Intel utilisent /etc/cshrc et les NeXT utilisent /etc/cshrc.std. A/UX, AMIX, Cray et IRIX n'ont pas d'équivalent dans csh(1), mais lisent ce fichier de toute façon dans tcsh. Solaris 2.x ne l'a pas non plus, mais tcsh lit /etc/.logout. (+)
/etc/csh.login
Lu par les shells de connexion après /etc/csh.cshrc. ConvexOS, Stellix et Intel utilisent /etc/login, les NeXT utilisent /etc/login.std, Solaris 2.x utilise /etc/.login et A/UX, AMIX, Cray et IRIX utilisent /etc/cshrc.
~/.tcshrc (+)
Lu par chaque shell après /etc/csh.cshrc ou son équivalent.
~/.cshrc
Lu par chaque shell, si ~/.tcshrc n'existe pas, après /etc/csh.cshrc ou son équivalent. Ce manuel utilise « ~/.tcshrc » pour « ~/.tcshrc » ou, si ~/.tcshrc n'a pas été trouvé, « /.cshrc ».
~/.history
Lu par les shells de connexion après ~/.tcshrc si savehist est définie, mais voyez également histfile.
~/.login
Lu par les shells de connexion après ~/.tcshrc ou ~/.history. Le shell peut être compilé afin de lire ~/.login avant plutôt qu'après ~/.tcshrc et ~/.history ; voyez la variable shell version.
~/.cshdirs (+)
Lu par les shells de connexion après ~/.login si savedirs est définie, mais voyez également dirsfile.
/etc/csh.logout
Lu par les shells de connexion lors de la déconnexion. ConvexOS, Stellix et Intel utilisent /etc/logout, et les NeXTs utilisent /etc/logout.std. A/UX, AMIX, Cray et IRIX n'ont pas d'équivalent dans csh(1), mais lisent de toute façon ce fichier dans tcsh. Solaris 2.x ne l'a pas non plus, mais tcsh lit /etc/.logout. (+)
~/.logout
Lu par les shells de connexion à la déconnexion après /etc/csh.logout ou son équivalent.
/bin/sh
Utilisé pour interpréter les scripts shell ne débutant pas par un « # ».
/tmp/sh*
Fichier temporaire pour « << ».
/etc/passwd
Source des répertoires personnels pour les substitutions « ~nom ».

L'ordre dans lequel les fichiers de démarrage sont lus peut être différent si le shell a été compilé de cette façon ; voyez Démarrage et arrêt et la variable shell version.

NOUVELLES FONCTIONNALITÉS (+)

Ce manuel décrit tcsh comme une entité unique, mais les utilisateurs expérimentés de csh(1) devraient porter une attention spéciale aux nouvelles fonctionnalités de tcsh.

Un éditeur de ligne de commandes, qui supporte les liaisons de touche de style GNU Emacs ou vi(1). Voyez L'éditeur de ligne de commandes et Commandes d'éditeur.

Un complètement et un listage des mots programmables et interactifs. Voyez Complètement et listage et les commandes intégrées complete et uncomplete.

La Correction orthographique des noms de fichiers, commandes et variables.

Les Commandes d'éditeur qui effectuent d'autres fonctions utiles au sein des commandes tapées, incluant une recherche de documentation (run-help), un redémarrage rapide de l'éditeur (run-fg-editor) et une résolution de commandes (which-command).

Un mécanisme d'historique amélioré. Les événements présents dans la liste d'historique sont horodatés. Voyez également la commande history et ses variables shell associées, le spécificateur d'événement auparavant non documenté « # » et les nouveaux modificateurs dans Substitution d'historique, les commandes d'éditeur *-history, history-search-*, i-search-*, vi-search-* et toggle-literal-history et la variable shell histlit.

Une analyse des répertoires et une gestion des piles de répertoires améliorées. Voyez les commandes cd, pushd, popd et dirs et leurs variables shell associées, la description de Substitution de pile de répertoires, les variables shell dirstack, owd et symlinks et les commandes d'éditeur normalize-command et normalize-path.

La négation dans les motifs génériques. Voyez Substitution des noms de fichiers.

De nouveaux Opérateurs de tests de fichiers et une commande intégrée filetest qui les utilise.

Certains Événements automatiques, périodiques et minutés incluant les événements programmés, les alias spéciaux, la déconnexion automatique et le verrouillage du terminal, la minuterie des commandes et la surveillance des connexions et déconnexions.

La prise en charge du NLS (voyez Support Système de la Langue Native), des fonctionnalités dépendantes du SE (voyez Support des variantes de Systèmes d'Exploitation et la variable shell echo_style), et les emplacements des fichiers dépendants du système (voyez FICHIERS).

Des capacités étendues de gestion des terminaux. Voyez Gestion des terminaux.

De nouvelles commandes intégrées incluant builtins, hup, ls-F, newgrp, printenv, which et where.

De nouvelles variables qui facilitent l'accès aux informations utiles depuis le shell. Voyez les variables shell gid, loginsh, oid, shlvl, tcsh, tty, uid et version et les variables d'environnement HOST, REMOTEHOST, VENDOR, OSTYPE et MACHTYPE.

Une nouvelle syntaxe pour l'inclusion d'informations utiles dans la chaîne de caractères d'invite (voyez prompt), et des invites spéciales pour les boucles et la correction orthographique (voyez prompt2 et prompt3).

Des variables accessibles en lecture seule. Voyez Substitution de variables.

BOGUES

Quand une commande suspendue est redémarrée, le shell affiche le répertoire dans lequel il l'a démarrée s'il est différent du répertoire courant. Cela peut induire en erreur (c.-à-d. être faux) puisque le travail peut avoir changé de répertoires en interne.

Les fonctions intégrées du shell ne sont pas arrêtables/redémarrables. Les séquences de commandes de la forme « a ; b ; c » ne sont pas non plus traitées gracieusement quand on essaie de les stopper. Si vous suspendez « b », le shell exécutera alors immédiatement « c ». Ceci est particulièrement perceptible si ce développement résulte d'un alias. Il suffit de placer la séquence de commandes dans des () pour les forcer à s'exécuter dans un sous-shell, p.ex. « ( a ; b ; c ) ».

Le contrôle sur la sortie du tty après que les processus aient été démarrés est primitif ; peut-être cela inspirera-t-il quelqu'un à écrire une bonne interface de terminal virtuel. Dans une interface de terminal virtuel, des choses nettement plus intéressantes pourraient être effectuées avec le contrôle de sortie.

La substitution d'alias est la plupart du temps utilisée pour simuler maladroitement des procédures shell ; des procédures shell devraient être fournies plutôt que des alias.

Les commandes présentes à l'intérieur de boucles ne sont pas placées dans la liste d'historique. Les structures de contrôle devraient être analysées plutôt que d'être reconnues comme des commandes intégrées. Cela permettrait aux commandes de contrôle d'être placées n'importe où, d'être combinées avec « | », et d'être utilisées avec la métasyntaxe « & » et « ; ».

foreach n'ignore pas les documents en ligne (here documents) quand elle recherche son end.

Il devrait être possible d'utiliser les modificateurs « : » sur la sortie des substitutions de commandes.

La mise à jour de l'écran pour des lignes plus grandes que la largeur de l'écran est très médiocre si le terminal ne peut déplacer le curseur vers le haut (c.-à-d. le type de terminal « dumb » (stupide)).

HPATH et NOREBIND ne doivent pas nécessairement être des variables d'environnement.

Les motifs génériques qui n'utilisent pas « ? », « * » ou « [] » ou qui utilisent « {} » ou « ~ » ne sont pas niés correctement.

La forme en une seule commande de if effectue la redirection de sortie même si l'expression est fausse et que la commande n'est pas exécutée.

ls-F inclut les caractères d'identifications de fichiers lors du tri des noms de fichiers et ne traite pas bien les caractères de contrôle dans les noms de fichiers. Il ne peut être interrompu.

Rapportez les bogues à tcsh-bugs@mx.gw.com, de préférence avec des corrections. Si vous voulez aider à maintenir et à tester tcsh, envoyez un mail à listserv@mx.gw.com avec le texte « subscribe tcsh <votre nom> » sur une ligne contenue dans le corps du mail. Vous pouvez également faire un « subscribe tcsh-bugs <votre nom> » pour obtenir tous les rapports de bogues, ou un « subscribe tcsh-diffs <votre nom> » pour obtenir la liste de développement plus des diffs pour chaque niveau de patch.

LE T DANS TCSH

En 1964, DEC produisait le PDP-6. Le PDP-10 était une réimplémentation postérieure. Il a été rebaptisé en DECsystem-10 en 1970 (à peu près) quand DEC mit sur le marché le second modèle, le KI10.

TENEX a été créé à Bolt, Beranek & Newman (un réservoir à idées de Cambridge, Massachussets) en 1972 comme une expérience sur les systèmes d'exploitation avec mémoire virtuelle paginée. Ils construisirent un nouveau paginateur pour le DEC PDP-10 et ont créé le SE pour aller avec. Il a eu beaucoup de succès dans le monde académique.

DEC sortit un nouveau modèle de PDP-10, le KL10 ; ils souhaitaient n'avoir qu'une version de TENEX pour la nouvelle machine, dont ils avaient acquis la licence auprès de BBN. Ils appelèrent leur version TOPS-20 (la mise en majuscule est une marque de fabrique). Un tas d'utilisateurs du TOPS-10 (« The OPerating System for PDP-10 ») se sont plaints ; ainsi, DEC dut supporter deux systèmes incompatibles sur le même matériel, mais ensuite il y en eut 6 sur le PDP-11 !

TENEX, et TOPS-20 jusqu'à la version 3, possédait le complètement de commandes via une sous-routine de bibliothèque de code de niveau utilisateur appelée ULTCMD. Avec la version 3, DEC déplaça cette capacité et plus encore dans le moniteur (« noyau » pour vous, les Unixiens), accessible via l'instruction COMND% JSYS (instruction « Jump to SYStem », le mécanisme d'appel au superviseur [sont-ce mes racines IBM qui se dévoilent ? ]).

Le créateur de tcsh a été impressionné par cette fonctionnalité et par beaucoup d'autres du TENEX et du TOPS-20, et a créé une version du csh qui les imitait.

LIMITATIONS

Les mots ne peuvent être plus longs que 1024 caractère.

Le système limite les liste d'arguments à 10240 caractères.

Le nombre d'arguments d'une commande qui implique un développement de noms de fichier est limité à 1/6-ème du nombre de caractères permis dans la liste d'arguments.

Les substitutions de commandes ne peuvent substituer plus de caractères que ce qui est permis dans la liste d'arguments.

Pour détecter les bouclages, le shell restreint le nombre de substitutions d'alias sur une seule ligne à 20.

VOYEZ AUSSI

csh(1), emacs(1), ls(1), newgrp(1), sh(1), setpath(1), stty(1), su(1), tset(1), vi(1), x(1), access(2), execve(2), fork(2), killpg(2), pipe(2), setrlimit(2), sigvec(2), stat(2), umask(2), vfork(2), wait(2), malloc(3), setlocale(3), tty(4), a.out(5), termcap(5), environ(7), termio(7), Introduction to the C Shell

VERSION

Ce manuel documente tcsh version 6.12.00 (Astron) du 23/07/2002.

AUTEURS

Auteur original de csh(1)
Contrôle des travaux et fonctionnalités de piles de répertoires
Complètement des noms de fichiers
Reconnaissance/complètement des noms de commandes
Éditeur de ligne de commandes, routines d'invite, une nouvelle syntaxe pour les motifs génériques et de nombreuses corrections et accélérations
Alias spéciaux, matériaux d'extraction de pile de répertoires, surveillance des connexions/déconnexions, événements programmés, et l'idée d'un nouveau format d'invite
Les commandes intégrées ls-F et which et de nombreuses corrections de bogues, modifications et accélérations
Routines d'allocateur de mémoire rapide
A incorporé le csh BSD 4.3 dans tcsh
Des portages sur HPUX, SVR2 et SVR3, une version SysV de getwd.c, support de SHORT_STRINGS et une nouvelle version de sh.glob.c
Portage sur A/UX
wordchars
Nettoyage du mode vi
autolist et listage des complètements ambigus
Les sauts de ligne dans l'invite
~/.tcshrc
Développement de l'historique magique via la barre d'espacement
Corrections à printprompt() et ajouts
Correction orthographique automatique et prompt3
De nombreuses corrections de bogues, améliorations et mises à jour du manuel
ampm, settc et telltc
Corrections dans le traitement des interruptions
Support des touches étendues
Support de Convex, de nombreuses corrections de bogues présents dans csh, sauvegarde et restauration de la pile de répertoires
(re)portage sur A/UX 2.0
Support du NLS et support du NLS simulé pour les sites ne prenant pas en charge le NLS, corrections
shlvl, support Mach, correct-line, affichage 8 bits
Support du termio POSIX, corrections de limites SysV
Corrections du mode vi, expand-line, correction de changements de fenêtre, portage sur Symmetry
Options de sonnerie autolist, a modifié la recherche d'historique pour rechercher la chaîne de caractères entière du début de la ligne jusqu'au curseur.
Portage Minix
Corrections de contrôle des travaux SVR4
Corrections étendues à vi et commande d'effacement dans vi
Corrections d'ANSIfication, un nouveau code de hachage pour les exécutables, corrections à imake, where
Portage ETA et Pyramid, corrections au Makefile et à lint, ajout de ignoreeof=n, et diverses autres modifications pour la portabilité et corrections de bogues.
complete-word-fwd et complete-word-back
Portage sur Coherent
Portage sur VMS-POSIX
Corrections pour les groupes de processus, correction de bogues de csh, tests de fichiers POSIX, SIGHUP POSIX
Portage sur CSOS
Portage et corrections sur Tek, m88k, Titan et Masscomp. Ajouta le support pour autoconf.
Portage OS/2
Portage Linux
Variables accessibles en lecture seule
Nouvelle page de manuel et tcsh.man2html
Patchs AFS et HESIOD
Affichage des répertoires amélioré dans l'invite. Ajouta ellipsis et rprompt.
Ajouta le cd implicite.
Portage sur la machine Siemens Nixdorf EBCDIC
Portage sur WIN32 (Windows/95 et Windows/NT) ; a écrit toutes les bibliothèques manquantes et le code de catalogue de messages pour l'interface avec Windows.
Ajout de couleurs pour ls.

REMERCIEMENTS À

Bryan Dunlap, Clayton Elwell, Karl Kleinpaste, Bob Manson, Steve Romig, Diana Smetters, Bob Sutterfield, Mark Verber, Elizabeth Zwicky et à toutes les autres personnes de l'État de l'Ohio pour leurs suggestions et leurs encouragements.

Tous les personnes sur le Net qui ont utilisé ce programme, rapporté des bogues et suggéré des améliorations à chaque nouvelle version.

Richard M. Alderson III, pour avoir écrit la section « T dans tcsh ».

TRADUCTION

Frédéric Delanoy <delanoy_f at yahoo.com>, 2003.

23 juillet 2002 Astron 6.12.00