home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-09-18 | 48.7 KB | 1,069 lines |
-
-
- AUSH - Manuel de référence
-
-
-
-
-
- AboutThisDoc
-
- Ce manuel décrit la version 3.17 de l'utilitaire AUSH. Ce programme
- est (c)1992-1994 par Denis GOUNELLE, toute utilisation commerciale ou vente
- sans autorisation écrite est strictement interdite. Vous pouvez copier et
- diffuser ce programme aux conditions suivantes :
-
- - l'ensemble des fichiers doit être fourni
- - aucun fichier ne doit avoir été modifié
- - vous ne devez pas demander plus de 40FF pour cela
-
- Malgré de nombreux tests, je ne peux garantir que AUSH ne contient
- aucune erreur. VOUS UTILISEZ CE PROGRAMME A VOS RISQUES ET PERILS. Je ne
- pourrai en aucun cas être tenu pour responsable de tout dommage, direct ou
- indirect, résultant de l'utilisation de AUSH.
-
- Introduction
-
- AUSH (Amiga Ultimate SHell) est un interpréteur de commande (ou
- "shell") écrit pour l'Amiga, et destiné à remplacer entièrement le shell de
- Commodore. Il s'inspire de tous les shells que j'ai utilisé jusqu'ici, aussi
- bien sous UNIX (sh, csh, et surtout tcsh 6.00.03) que sur Amiga (AShell 1.3
- et Csh 4.01A), tout en intégrant de nombreuses idées personnelles et en
- gardant la plus grande compatibilité possible avec le shell de Commodore.
-
- Vos critiques et suggestions sur ce programme seront toujours les
- bienvenues. N'hésitez pas à m'écrire, à l'adresse suivante :
-
- M. GOUNELLE Denis
- 27, rue Jules GUESDE
- 45400 FLEURY-LES-AUBRAIS
- FRANCE
-
- Vous pouvez également m'adresser un message à l'adresse Internet
- "gounelle@alphanet.ch". Notez qu'il s'agit d'une boite à lettre mise à ma
- disposition par un ami, aussi veuillez n'envoyer que de courts messages. De
- plus, n'ayant pas accès directement à mes messages, n'espérez pas avoir une
- réponse avant une dizaine de jours.
-
- Merci à Pierre ARDICHVILI, Jean-Yves PROUX, Jean-Philippe RAPP, et
- Michel SCHINZ pour leurs tests et leurs suggestions.
-
- Installation
-
- Cette version de AUSH ne fonctionne que sous système 2.04 (ou
- supérieur). Copiez les fichiers "AUSH" (le shell lui-même) et "NewAUSH"
- (commande pour lancer un nouveau shell) dans le répertoire "C:". Notez que
- AUSH et NewAUSH sont écrits en code ré-entrant, et peuvent donc parfaitement
- être rendus résidents.
- AUSH est désormais localisé, c'est-à-dire qu'il peut s'adapter à la
- langue par défaut si vous avez le système 2.1 ou plus. Il vous faudra alors
- copier le fichier catalogue désiré dans le répertoire correspondant à votre
- langue par défaut. Par exemple, s'il s'agit du français, copiez le fichier
- "français.catalog" dans le répertoire "SYS:Locale/Catalogs/Français", sous
- le nom "AUSH.catalog"
-
- La commande NewAUSH
-
- Cette commande est l'équivalent des commandes "NewCLI" et "NewShell"
- du shell de Commodore. Elle ne fonctionnera que si le programme "AUSH" se
- trouve dans le chemin d'accès défini par la commande "Path". Pour lancer un
- nouveau shell, depuis la ligne de commande, tapez :
-
- NewAUSH [WINDOW <spécification de fenêtre>] [FROM <fichier>]
-
- Pour lancer un nouveau shell depuis le WorkBench, créez une icône de
- type "Project". Indiquez éventuellement une taille de pile (champ "STACK"),
- une spécification de fenêtre (champ "TOOL TYPE", sous la forme
- "WINDOW=spécification"), et un nom de fichier de démarrage (champ "TOOL
- TYPE", sous la forme "FROM=fichier"). N'oubliez pas de mettre le chemin
- d'accès à NewAUSH dans le champ "DEFAULT TOOL".
-
- Notions de base
-
- Lorsque vous lancez AUSH, un message indiquant la version du
- programme apparait, suivit d'une chaine d'invite (ou "prompt"). Par défaut,
- cette chaine indique le numéro du shell, suivit du répertoire courant. Le
- shell attend alors vos commandes.
-
- Une commande simple est une suite de mots séparés par un ou
- plusieurs espaces. Le premier mot indique la commande à exécuter, et les
- autres sont les arguments à passer à cette commande.
- Si le premier mot correspond à un alias, la substitution
- correspondante est effectuée. Cela continue tant que c'est possible, ce qui
- veut dire qu'un alias peut être défini en fonction d'un autre. Notez
- cependant qu'il n'y a pas de contrôle de récursivité des définitions. Vous
- pouvez désactiver la substitution des alias en ajoutant le caractère "\"
- devant le nom de la commande (par exemple "\ls df0:")
- AUSH examine également les arguments, et remplace certains d'entre
- eux en fonction des règles suivantes :
-
- ; tout ce qui suit est un commentaire, et est ignoré.
- ^car remplacé par "CTRL-car" si "car" est une lettre, par
- "car" sinon.
- §n remplacé par le n-ième répertoire dans la pile des
- répertoires.
- $var remplacé par la valeur de la variable "var" (cherchée
- d'abord dans les variables locales, puis dans les
- variables globales, et enfin dans les variables
- d'environnement de Commodore) ou par une chaine vide si
- cette variable n'est pas définie.
- Le nom de la variable peut être indiqué entre accolades
- afin de le séparer de la suite : si vous voulez par
- exemple afficher le contenu de la variable "var" suivit
- du mot "coucou", il vous faudra écrire "echo
- ${var}coucou" et non "echo $varcoucou".
- Le nom de la variable peut éventuellement être suivit
- d'un nom de fonction. Cette fonction sera appliquée au
- contenu de la variable (si la variable est définie) lors
- de la substitution. Notez que le contenu réel de la
- variable ne sera pas modifié. Les fonctions disponibles
- sont :
-
- lower converti en minuscules
- upper converti en majuscules
- first extrait le premier caractère
- slead supprime espaces et tabulations en tête
- len calcule la longueur
- base supprime le chemin d'accès
- noext supprime l'extension
- expand étend le motif
- split découpe la variable en plusieurs sous-chaines
- (voir commande "for")
-
- La syntaxe à respecter est la forme "var:fonction", par
- exemple "$config:lower" ou "${config:lower}".
- motif remplacé par le nom de tous les fichiers correspondant.
- Un motif est un mot contenant au moins un
- méta-caractères AmigaDOS. Notez que la plupart des
- commandes (list, copy, ...) étendent elles-même les
- motifs, et que dans ce cas il vous faudra mettre le
- motif entre quotes (par exemple "list '#?.o'") pour
- éviter des conflits.
- {expr} remplacé par la valeur de l'expression (voir la syntaxe
- plus loin).
- !! remplacé par la dernière commande dans l'historique.
- !n remplacé par la commande numéro "n" dans l'historique.
- !chaine remplacé par la dernière commande commençant par
- "chaine" dans l'historique.
- `cmd` remplacé par la première ligne produite en sortie par la
- commande indiquée. Les espaces en tête sont éliminés
- avant remplacement, la ligne est considéré comme un seul
- argument et n'est pas ré-interprété.
- Exemple : la commande "set toto `type config`" copie le
- contenu de la première ligne du fichier "config" dans la
- variable locale "toto".
- \car copie le caractère indiqué sans l'interpréter.
- 'chaine' copie la chaine sans interprétation (à part de la forme
- "\car").
- "chaine" copie la chaine sans interprétation, à part des formes
- "^car", "§n", "$var", "{expr}" et "\car". De plus,
- l'extension des motifs n'est pas désactivée.
-
- AUSH est également capable de rediriger l'entrée ou la sortie d'une
- commande : au lieu de se faire sur la fenêtre courante, elle se fera sur le
- fichier indiqué. La syntaxe à respecter est la suivante :
-
- >nom redirection de la sortie vers le fichier "nom". Le
- fichier est écrasé s'il existe déjà, créé sinon.
- >>nom redirection de la sortie vers le fichier "nom". La
- sortie est ajoutée à la fin du fichier s'il existe,
- sinon le fichier est créé.
- <nom redirection de l'entrée depuis le fichier "nom".
-
- La spécification de ces redirections peut se faire n'importe où sur
- la ligne de commande. Il peut y avoir un ou plusieurs espaces entre les
- caractères de redirection et le nom de fichier (comme par exemple
- "list > maliste").
-
- Une commande complexe est composée d'au moins deux commandes simples
- enchainées par une des formes suivantes :
-
- cmd1|cmd2|... exécution successive de commandes simples, avec
- "pipes" (la sortie de la commande à gauche du
- caractère "|" est utilisée comme entrée par la
- commande indiquée à droite), tant que le code retour
- est nul.
- cmd1,cmd2,... exécution successive de commandes, tant que le code
- retour est nul. Vous pouvez spécifier des commandes
- simples, mais aussi des enchainements par pipes (par
- exemple "cd ram: , list | wc , delete toto").
-
- Le code retour d'une commande complexe est celui de la dernière
- commande simple exécutée. Seule la dernière commande simple d'une commande
- complexe peut être lancée en arrière plan.
-
- Une fois l'analyse de la ligne de commande terminée, AUSH lance
- l'exécution de la commande correspondante. La recherche se fait d'abord dans
- la liste des commandes internes au shell, puis dans la liste des commandes
- résidentes, et enfin dans les répertoires indiqués à l'aide la commande
- "Path". Une fois la commande lancée, AUSH attend la fin de son exécution,
- met à jour certaines variables (comme celle indiquant le code retour de la
- dernière commande exécutée) puis affiche de nouveau la chaine d'invite.
- Vous pouvez demander une exécution en arrière plan, c'est-à-dire que
- AUSH n'attendra pas la fin de la commande. Il vous faudra alors spécifier le
- caractère "&" sur la ligne de commande (par exemple "list >maliste &"). Le
- shell affichera alors le numéro de processus de cette commande puis l'invite
- ré-apparaitra immédiatement.
- Par défaut, les commandes héritent de la priorité du shell, mais
- AUSH vous permet de modifier temporairement cette priorité. Ainsi, si vous
- tapez une ligne de la forme "cmd @n", la commande indiquée sera exécutée
- avec la priorité "n" (par exemple "list @-3" lancera la commande "list" avec
- la priorité -3). Ceci ne marchera cependant pas pour les commandes internes.
- De même, lors du lancement en arrière plan, vous pouvez faire suivre le
- caractère "&" par la priorité à donner à la commande. Par exemple, "list
- >maliste &5" lancera la commande "list" en arrière plan, avec la priorité 5.
- Notez que les spécifications "&" et "@" peuvent être indiquées
- n'importe où sur la ligne de commande.
-
- Les variables
-
- AUSH vous permet de définir des variables, comme dans un langage de
- programmation classique. Les caractères autorisés pour les noms de variables
- sont les lettres minuscules et majuscules, les chiffres, et le caractère
- souligné. Notez que minuscules et majuscules sont différenciées
- (contrairement aux noms de fichiers). Ces variables peuvent contenir
- n'importe quelle valeur, aussi bien numérique que alphanumérique.
- Les variables globales sont accessibles à tous les niveaux
- d'exécution, c'est-à-dire aussi bien en mode interactif que dans les
- fichiers de commandes. Elles ne peuvent être détruites. Notez qu'il ne
- s'agit pas des variables au sens des variables d'environnement de Commodore.
- Elles ne sont pas partagées par plusieurs shells.
- Une variables locale n'est accessible que dans le niveau d'exécution
- où elle a été définie pour la première fois. Lors du retour au niveau
- précédent, les variables locales sont détruites automatiquement.
- Certaines variables permettent de contrôler et de paramètrer AUSH.
- Ces variables sont décrites plus loin.
-
- Expressions
-
- AUSH peut évaluer des expressions entières, exprimées en notation
- polonaise inversée postfixée. Vous pouvez utiliser des variables locales ou
- globales dans ces expressions, si leurs valeurs sont numériques. Il est
- possible d'indiquer des nombres hexadécimaux (précédés par "0x", par exemple
- "0x13e"). Par défaut le résultat est en décimal. Les opérateurs reconnus
- sont :
-
- + addition
- - soustraction
- * multiplication
- / division
- % modulo (reste de la division entière)
- < décalage à gauche
- > décalage à droite
- & et
- | ou
- sx dépile le sommet de pile dans le registre x
- lx empile le contenu du registre x
- HEX affiche le résultat en hexadécimal
-
- Il y a dix registres (désignés par un chiffre de 0 à 9) initialisés
- à zéro au démarrage du shell. Ils conservent leur valeur entre deux
- évaluations d'expression. Les nombres et les opérateurs doivent être séparés
- par au moins un espace, sauf le - unaire (négation).
-
- Exemples :
-
- echo { 34 3 / 4 + } => 15
- echo { 7 3 - } => 4
- echo { 10 -2 + } => 8
-
- set cpt 3
- echo { $cpt 2 * } => 6
- set cpt { $cpt 1 + }
- echo $cpt => 4
-
- Les fichiers de commandes
-
- Vous pouvez regrouper plusieurs commandes dans un fichier, et le
- faire exécuter par AUSH comme un programme quelconque. Tout ce passera alors
- comme si vous aviez tapé cette suite de commandes au clavier, à part sur le
- plan des variables locales.
- Dans un fichier de commandes, la variable locale "argc" indique le
- nombre d'arguments reçus. AUSH positionne également des pseudo-variables
- locales (elles n'apparaissent pas dans la liste des variables données par la
- commande "set", et ne peuvent être modifiées) : la variable "0" contient le
- nom du fichier de commandes, les variables "1", "2",... les différents
- arguments, et la variable "*" la liste des arguments (à partir de "$1")
- séparés par un espace.
- Chaque fois que vous lancez AUSH, le fichier de commandes
- "S:.aushrc" est exécuté (s'il existe). L'argument optionnel "FROM fichier"
- permet d'exécuter le fichier de commandes indiqué plutôt que le fichier
- "S:.aushrc".
-
- Gestion de l'historique
-
- AUSH peut mémoriser vos commandes, et vous permettre de les rappeler
- par la suite. Le mécanisme d'historique, qui ne fonctionne qu'en mode
- interactif, est contrôlé par la variable "history" (qui indique le nombre de
- commandes à conserver). La commande "history" (décrite plus loin) vous
- permet de voir le contenu de l'historique.
-
- La variable "savehist" indique le nombre de commandes sauvées entre
- chaque exécution d'un shell. Ce fichier (généré lors de la terminaison du
- shell) est automatiquement chargé lors du démarrage, et les commandes qu'il
- contient sont copiées dans l'historique. La variable "histfile" peut être
- définie, pour indiquer le nom du fichier de sauvegarde. Par défaut ce
- fichier est "S:.history".
-
- Edition de la ligne de commandes
-
- Ce mécanisme permet de se passer du gestionnaire de console NewCON.
- Il est activé en affectant la valeur "1" à la variable "lineedit". Vous
- pouvez alors utiliser les touches suivantes pour éditer vos lignes de
- commande :
-
- gauche caractère précédent.
- droite caractère suivant.
- shift-gauche mot précédent.
- shift-droit mot suivant.
- shift-haut dernière commande commençant par la ligne courante.
- haut commande précédente dans l'historique.
- bas commande suivante dans l'historique.
- ^A va en début de ligne.
- ^B caractère précédent.
- ^E va en fin de ligne.
- ^F caractère suivant.
- ^K efface la fin de ligne.
- ^L ré-affiche la ligne.
- ^N commande suivante dans l'historique.
- ^P commande précédente dans l'historique.
- ^S échange les deux caractères précédents.
- ^T première commande dans l'historique.
- ^W efface la fin du mot.
- ^X efface la ligne.
- ^Z dernière commande dans l'historique.
- RETURN exécute la commande, après sauvegarde dans l'historique.
- ESC annule la commande, après sauvegarde dans l'historique.
-
- ^V le mot précédent est considéré comme un nom de variable
- et est remplacé par la valeur de cette variable.
- Exemple : echo version<^V> => echo 1.10.
- TAB complète le nom de fichier ou de variable.
- Exemple : cd ram:
- list Cl<TAB> => list ClipBoards/
- echo $hi<TAB> => echo $history
- S'il y a plusieurs possibilités, AUSH complète le plus
- loin possible et affiche la liste des possibilités.
- Pour compléter un nom de fichier, AUSH lui ajoute le
- contenu de la variable "filepat" et étend le motif
- ainsi obtenue.
- ^D affiche la liste des possibilités pour compléter le
- nom de fichier ou de variable (sans modifier la ligne
- de commande).
-
- HELP appelle la requête de fichier. Si vous choisissez un
- fichier, son nom sera ajouté dans la ligne de commande.
-
- f1 à f10 remplacé par la valeur des variables "f1" à "f10", ou
- "F1" à "F10" si shifté.
-
- Les commandes TAB et ^D peuvent être utilisées au milieu d'un mot. Toutes
- les touches de contrôle peuvent être redéfinies, à l'aide de la variable
- spéciale "keys" (voir plus loin).
-
- Gestion des répertoires
-
- Si vous définissez l'alias "dircmd", cet alias sera exécuté chaque
- fois que vous taperez un nom de répertoire comme nom de commande (sans
- argument, redirection, pipe, ni lancement en arrière-plan). Par exemple
- "alias dircmd cd %1" vous permet d'avoir un "cd" implicite : taper le nom
- d'un répertoire suffit pour y aller. Vous pouvez également définir un alias
- plus complexe, comme "alias dircmd cd %1 , list FILES QUICK".
-
- AUSH peut gérer une pile de répertoire (64 entrées). L'ajout d'un
- répertoire ce fait à l'aide la commande interne "pushd", le retrait par
- "popd", et l'affichage du contenu de la pile par "dirs" (ces commandes sont
- décrites plus loin).
- Vous pouvez utiliser cette pile dans vos commandes avec la forme
- "§n", où "n" est le numéro d'un répertoire dans la pile (indiqué par la
- commande "dirs").
-
- Commandes internes
-
- Ce chapitre décrit toutes les commandes internes de AUSH. Ces
- commandes ne peuvent être lancées en arrière plan mais acceptent les
- redirections en entrée et en sortie. Elles retournent 0 (RETURN_OK) ou 20
- (RETURN_FAIL) suivant le cas.
- Lors de l'affichage de la valeur d'une variable par les commandes
- "setvar" ou "set", les attributs de cette variable sont affichés entre
- parenthèses ("x" pour exportable, "r" pour lecture seulement).
-
- alias
- Affiche la liste des alias et leurs définitions.
-
- alias nom
- Affiche la définition de l'alias indiqué.
-
- alias nom chaine
- Défini un alias "nom" de valeur "chaine". Dans la chaine, le symbole
- "[]" indique où placer les arguments lors de la substitution de
- l'alias. Il est possible de désigner les arguments un par un, avec
- les spécifications "%1", "%2", ..."%9".
-
- cd [rep]
- Sans argument affiche le nom du répertoire courant, sinon "rep"
- devient le répertoire courant.
-
- dirs
- Affiche le contenu de la pile des répertoires.
-
- echo [-c] [args...]
- Affiche les arguments sur la sortie standard, suivis d'un retour
- chariot sauf si vous indiquez l'option "-c".
-
- eval
- Passe en mode évaluation : toute ligne en entrée est analysée comme
- une expression (voir syntaxe plus haut) et le résultat affiché. Pour
- sortir de ce mode, tapez "x" tout seul sur une ligne.
-
- exit [code]
- Retourne au niveau d'exécution précédent, avec le code retour
- indiqué (0 par défaut). En mode interactif, termine le shell.
-
- export vars...
- Marque les variables locales indiquées comme "exportables". Ces
- variables deviennent alors lisibles, modifiables et détruisibles
- dans les fichiers de commandes lancés depuis le niveau d'exécution
- courant.
-
- for var in val1 val2... valn
- ...
- done
- Effectue une boucle. La variable "var" (locale) prend les valeurs
- indiquées dans la liste, et pour chaque valeur la séquence
- d'instruction entre le "for" et le "done" est exécutée une fois.
- Après le "done", la variable contient la dernière valeur pour
- laquelle la boucle a été effectuée. En mode interactif, l'invite
- devient celle indiquée par la variable "prompt3", entre le "for" et
- le "done".
- Vous pouvez également utiliser la forme "for var in val1 .. val2",
- qui effectue la boucle pour chaque valeur comprise entre les nombres
- "val1" et "val2" inclus. Si le nombre "val2" est inférieur au nombre
- "val1", la boucle est effectué avec un pas de -1. Les nombres "val1"
- et "val2" peuvent être négatifs.
- La fonction "split" peut être très utile ici : si la variable "toto"
- contient "ceci est un exemple", la commande "for i in $toto" ne fera
- qu'une seule boucle, avec "i" valant "ceci est un exemple". Par
- contre, la commande "for i in $toto:split" fera bien quatre boucles,
- avec "i" valant successivement "ceci", "est", "un" et "exemple".
-
- for var from file
- ...
- done
- Effectue une boucle de la même façon que pour la forme précédente,
- sauf que la variable "var" (locale) prend successivement pour valeur
- chaque ligne du fichier indiqué.
-
- history [str]
- Donne la liste des commandes présentes dans l'historique. Si vous
- indiquez un argument "str", l'affichage sera limité aux commandes
- commençant par la chaine de caractères"str".
-
-
- if [NOT] condition
- ....
- [else
- ....]
- endif
- Exécution conditionnelle. En mode "interactif", la chaine d'invite
- devient celle indiquée par la variable "prompt2".
- La condition peut être :
-
- -d nom vrai si "nom" est un répertoire (1)
- -e nom vrai si "nom" existe (1)
- -f nom vrai si "nom" est un fichier (1)
- -o nom nom2 vrai si "nom1" et "nom2" existent et que
- "nom" est plus ancien que "nom2" (1)
- -s nom vrai si "nom" est un fichier non vide (1)
- str = str vrai si les deux chaines sont identiques
- str == str vrai si les deux chaines sont identiques
- (sans différencier majuscules et minuscules)
- n1 LT n2 vrai si n1 est inférieur n2
- n1 EQ n2 vrai si n1 est égal à n2
- n1 GT n2 vrai si n1 est supérieur n2
- n1 LE n2 vrai si n1 est inférieur ou égal à n2
- n1 NE n2 vrai si n1 est différent de n2
- n1 GE n2 vrai si n1 est supérieur ou égal à n2
-
- Le mot-clé "NOT" avant une condition permet d'inverser cette
- condition. Jusqu'à 16 commandes "if" peuvent être imbriquées.
-
- (1) Si la lettre après le tiret est en majuscule (exemple: "-D"), le
- test échouera sans requêtes de l'AmigaDOS en cas de volume
- absent, lecteur de disquette vide, etc...
-
- jobs
- Affiche la liste des processus lancés en arrière plan.
-
- loadhist
- Force le chargement immédiat du fichier contenant l'historique des
- commandes. Cette commande peut être utile si vous changez la valeur
- de la variable "histfile" et que vous voulez prendre en compte le
- nouveau fichier.
-
- popd [nb]
- Sans arguments dépile le dernier répertoire empilé et en fait le
- répertoire courant, sinon tronque la pile des répertoires aux "nb"
- premiers répertoires ("popd 0" vide complètement la pile).
-
- pushd rep
- Empile le répertoire courant, puis fait de "rep" le répertoire
- courant.
-
- read [-f] var
- Affecte à la variable locale indiquée une ligne lue sur l'entrée
- standard. Retourne RETURN_FAIL en cas de fin de fichier. L'option -f
- permet d'interdire la saisie d'une chaine vide.
-
- readonly vars...
- Empêche toute modification ou destruction des variables (locales ou
- globales) indiquées. Cette opération est irréversible.
-
- set
- Affiche la liste des variables locales, ainsi que leur valeurs.
-
- set var
- Affiche la valeur de la variable locale "var".
-
- set var val
- Affecte la valeur "val" à la variable locale "var". La variable est
- créée si elle n'existe pas encore.
-
- setvar
- Affiche la liste des variables globales, ainsi que leur valeurs.
-
- setvar var
- Affiche la valeur de la variable globale "var".
-
- setvar var val
- Affecte la valeur "val" à la variable globale "var". La variable est
- créée si elle n'existe pas encore.
-
- shift
- Décale les arguments d'un fichier de commandes : la pseudo-variable
- "1" reçoit le contenu de "2", puis la pseudo-variable "2" celui de
- "3", etc... La variable "argc" et la pseudo-variable "*" sont mises
- à jour.
-
- source fichier
- Exécute le fichier de commandes indiqué. Si vous redirigez la sortie
- de cette commande, la redirection concernera toutes les commandes du
- fichier.
-
- stop [code]
- Interrompt l'exécution de la boucle "for...done" courante, avec le
- code retour indiqué (0 par défaut).
-
- time <commande>
- Lance l'exécution de la commande indiquée, puis affiche la durée (en
- secondes) d'exécution de cette commande. Peut être utilisé pour
- toutes les commandes, y compris les commandes internes et les
- commandes lancées en arrière plan.
-
- unalias noms...
- Détruit les alias indiqués.
-
- unset vars...
- Détruit les variables locales indiquées.
-
- window front
- window back
- window move x y
- window size largeur hauteur
- Place la fenêtre au premier plan, au dernier plan, change sa
- position ou sa taille.
-
- writehist
- Force une sauvegarde immédiate de l'historique. Cette commande peut
- être utilisée par exemple avant de lancer un programme qui risque de
- "planter" votre Amiga.
-
- Variables spéciales
-
- Les variables suivantes permettent de contrôler et de paramétrer
- AUSH. Sauf dans le cas où une valeur initiale est indiquée, elles ne sont
- pas définies au démarrage. Il est recommandé de les définir comme variables
- globales (c'est d'ailleurs ce que fait AUSH pour celles qui ont une valeur
- initiale) ou éventuellement comme variables d'environnement de Commodore.
-
- cmdnum numéro de commande, de la forme "_ShellNumber_CmdNumber"
- (garanti différent pour chaque commande exécutée).
- cwd nom du répertoire courant.
- debug si vaut "1", trace les commandes exécutées (avant et après
- première interprétation, utile pour la mise au point des
- fichiers de commandes).
- delim caractères délimiteurs de mots pour les fonctions "mot
- suivant", "mot précédent" et "efface la fin du mot" de
- l'éditeur de la ligne de commande.
- Valeur initiale : " :/".
- filepat chaine ajoutée au mot en cours pour compléter les nom de
- fichiers.
- Valeur initiale : "#?".
- fullhist si vaut "1", sauvegarde toutes les commandes dans
- l'historique, sinon ne sauvegarde pas deux fois de suite la
- même commande.
- histfile nom du fichier de sauvegarde de l'historique entre deux
- sessions. Si cette variable n'est pas définie, l'historique
- est sauvegardé dans "S:.history".
- histmin longueur minimale que doit avoir une commande pour être
- conservée dans l'historique.
- Valeur initiale : 3.
- history nombre de commandes conservées dans l'historique (si non
- défini ou inférieur à 1, seule la dernière commande est
- sauvée).
- Valeur initiale : 50.
- insert si vaut "1", l'édition de la ligne de commande se fait en
- mode "insertion" (mode "remplacement" sinon).
- Valeur initiale : 1.
- ioerror code d'erreur positionné par la dernière commande ayant
- échoué (pour l'instant ne marche que pour les commandes
- internes).
- Valeur initiale : 0.
- keys indique comment gérer les touches de contrôle sous l'éditeur
- de lignes de commande. La valeur de cette variable doit être
- une chaine de lettres minuscules, chaque lettre indiquant la
- touche de contrôle appelant une des fonctions de l'éditeur.
- C'est la position de la lettre dans la chaine qui détermine
- la fonction appelée :
-
- position 1 va en début de ligne
- position 2 caractère précédent
- position 3 liste des compléments
- position 4 va en fin de ligne
- position 5 caractère suivant
- position 6 efface fin de ligne
- position 7 re-affiche la ligne
- position 8 ligne suivante
- position 9 ligne précédente
- position 10 échange deux caractères
- position 11 va au début de l'historique
- position 12 remplace variable
- position 13 efface fin de mot
- position 14 efface ligne
- position 15 va à la fin de l'historique
-
- Par exemple, si la quatrième lettre est un "o", l'appui sur
- la touche ^o déplacera le curseur en fin de ligne. Dans la
- redéfinition des touches à utiliser, veuillez ne pas
- spécifier les touches de contrôle ^h, ^i, ^j, et ^m, car ces
- touches sont gérées spécialement.
- Valeur initiale : "abdefklnpstvwxz".
- lineedit si vaut "1", active l'édition de la ligne de commande. Est
- ignorée si la variable "remove" vaut "1".
- noexpand si vaut "1", désactive l'extension des méta-caractères.
- path indique le chemin de recherche des commandes à exécuter,
- sous la forme d'une liste de noms de répertoires séparés par
- un caractère ";". Pour désigner le répertoire courant,
- indiquez "." comme nom de répertoire. Si un fichier avec le
- bit "s" est trouvé, AUSH tentera de déterminer son type et
- lancera automatiquement la commande associée :
-
- rx si le fichier commence par "/*" (script AREXX)
- source si le fichier commence par ";AUSH" (script AUSH)
- execute dans tous les autres cas
-
- Exemple : setvar path 'ram:;.;c:;sys:utilities'
- prompt chaine d'invite, interprétée comme suit :
-
- %h numéro dans l'historique
- %# numéro du shell
- %i niveau d'imbrication des "if"
- %l niveau d'imbrication de boucle
- %c nom du répertoire courant (variable "cwd")
- %b nom de base du répertoire courant
- %s dernier code retour (variable "status")
- %Vnom valeur de la variable "nom".
- %T heure (HH:MM:SS)
- %d jour du mois (1-31)
- %D jour de la semaine (Lun-Dim)
- %m mois (1-12)
- %M nom du mois (Jan-Dec)
- %y année (1900-1999)
- %C caractère CSI (0x9B)
- %N caractère retour chariot
- %f taille de mémoire FAST libre
- %v taille de mémoire CHIP libre
- %a taille de mémoire libre (CHIP+FAST)
- %% signe %
-
- Valeur initiale : "%C0;33;40m< %# - %c >%C0;31;40m ".
- prompt2 idem que "prompt", mais utilisé entre "if" et "endif".
- Valeur initiale : "%i> ".
- prompt3 idem que "prompt", mais utilisé entre "for" et "done".
- Valeur initiale : "%l) ".
-
- NOTE : en l'absence de définition, "> " est utilisé comme invite.
-
- remote vaut "1" pour un shell utilisant "AUX:" comme terminal.
- savehist nombre de commandes sauvées entre chaque session (si non
- défini ou inférieur à 1 rien n'est sauvé).
- status code retour de la dernière commande exécutée.
- titlebar idem que "prompt", mais pour le titre de la fenêtre shell.
- Est ignorée si la variable "remote" vaut "1".
- trap commande(s) à exécuter lors de l'interruption d'un fichier
- de commandes ou d'une boucle "for...done" par l'appui sur
- CTRL-C ou CTRL-D. Contrairement aux autres variables
- spéciales, il est conseillé de définir cette variable
- localement (commande "set", permet à chaque fichier de
- commandes de la modifier en fonction de ses besoins). Il est
- également conseillé d'indiquer une commande "exit" comme
- dernière commande (exemple : set trap 'delete $tmpfile ,
- exit 20'), sinon l'exécution reprendra au point où elle en
- était (pour ignorer les interruptions : set trap ';'). Si
- cette variable n'est pas définie, l'exécution est arrêtée
- avec un code retour de 20.
- truepipes utilise "PIPE:" pour gérer les tubes si cette variable vaut
- "1"
- version numéro de version de AUSH.
-
- Notes
-
- Sauf si vous lui affectez une pile de plus de 4000 octets AVANT de
- le lancer, AUSH ne pourra exécuter plus d'une quinzaine de fichiers de
- commandes et/ou de boucles imbriquées (vous obtiendrez le message "pas assez
- de place dans la pile !").
- Si le nom indiqué pour les redirections en sortie est "TTY" (i.e.
- ">TTY" ou ">>TTY"), la redirection se fait vers la fenêtre du shell. Cela
- peut être utile dans un fichier de commandes, pour afficher un message alors
- que la sortie de toutes les commandes a été redirigée vers un fichier.
- Par défauts, les pipes sont gérés à l'aide de fichiers temporaires
- créés dans le répertoire "T:" (voir variable "truepipes"). Le répertoire
- "T:" est également utilisé pour stocker des fichiers temporaires lors des
- substitutions de commandes et de l'exécution des boucles "for...done".
- La forme "cmd &" correspond à la forme "run cmd" du shell de
- Commodore. Notez que AUSH attend la fin de toutes les commandes lancées en
- arrière plan avant de terminer. La commande "jobs" vous permettra de savoir
- quelles sont ces commandes.
- AUSH n'est pas capable de récupérer le code retour d'une commande
- lancée en arrière plan.
-
- Version UNIX
-
- AUSH comprend la forme "variable=valeur". Les formes "@pri" et
- "&pri" sont ignorées, car nice() ne permet pas d'augmenter la priorité. La
- commande "cd" sans arguments permet de revenir dans $HOME (comme d'habitude
- sous UNIX). Les fichiers ".aushrc" et ".history" sont cherchés par défaut
- dans $HOME. Dans l'invite, on ne peut avoir la memoire restante ou le
- caractère CSI. La variable "truepipes" est ignorée (les tubes sont simulés
- par des fichiers dans "/tmp").
- AUSH transforme automatiquement les motifs pour qu'ils correspondent
- au format des expressions régulières utilisées par "ed", afin de pouvoir
- étendre ces motifs. Il peut donc y avoir quelques conflits de temps en
- temps. Les caractères reconnus pour les motifs sont '*', '?', '[' et ']'.
- L'heure de décès des fils est l'heure à laquelle on détecte sa fin
- (normalement pas trop de décalage, puisqu'on déroute le signal SIGCHLD).
- Sous un shell UNIX normal, la commande "set" donne la liste des
- variables dans l'environnement courant. Sous AUSH, on obtient la liste des
- variables locales. Si on veut le contenu de l'environnement, il faut
- utiliser la commande "env".
- L'éditeur de ligne de commandes tient compte du terminal indiqué par
- la variable $TERM. Comme on ne peut pas récuperer les valeurs des touches de
- fonctions shiftées, ainsi que de la touche shift-up, ces touches ne sont
- utilisables que sur un terminal "amiga". La touche HELP ne fait rien.
-
- Historique
-
- v1.00 28-Feb-92, 29564 octets
- o Première version diffusée.
-
- v1.10 28-Mar-92, 31828 octets
- o Cherche les variables également dans les variables ARP/Commodore
- et Manx.
- o La touche "^D" affiche les possibilités pour compléter le nom de
- fichier ou de variable, les touches "^B", "^F", "^N" et "^P" font
- la même chose que "gauche", "droite", "bas" et "haut".
- o L'éditeur de ligne de commande efface le curseur pendant qu'il
- exécute une commande (affichage plus rapide).
- o La requête de fichier récupère le mot en cours pour initialiser le
- répertoire initial de la requête.
- o Remet à zéro les signaux SIGBREAKF en retour de l'éditeur de ligne
- de commandes (car ils sont positionnés si on utilise ^D, ^E, ou
- ^F).
- o Les formes "!!", "!n" et "!chaine" peuvent être indiquée n'importe
- où sur la ligne de commande.
- o Ajout des formes -D, -E, et -F à la commande "if".
- o Ajout de la forme "for var in val1 .. val2" pour la commande
- "for...done".
- o Ajout de l'alias "dircmd".
- o Ajoute un espace après une définition d'alias sans arguments (si
- on faisait "alias ls dir" puis "ls ram:" on avait un message
- "Please insert volume dirram: in any drive").
- o Messages d'erreur en allemand si la variable "language" vaut
- "deutsch".
- o Commande "setenv" renommée en "setvar" (plus de conflits avec la
- commande de Commodore), ajout de la commande "echo".
- o Ajout des variables "version" et "path", variable "ioerror"
- initialisée à "0", variable "insert" initialisée à "1", variable
- "autocd" supprimée.
-
- v1.11 29-Mar-92, 31832 octets
- o La commande "echo" tient compte des redirections en sorties
-
- v1.12 11-Apr-92, 32244 octets
- o Charge l'historique après l'exécution de "S:.aushrc", afin de
- prendre en compte une éventuelle modification de la valeur de la
- variable "history".
- o Ajout des formes "NE", "LE", et "GE" à la commande "if".
- o La forme "for i in val1 .. val2" accepte des nombres négatifs et
- que "val2" soit inférieur à "val1".
- o Plus de contrôle de la taille des arguments pour les commandes
- internes.
- o Ajout de la fonction "^V" à l'éditeur de ligne de commandes.
-
- v1.13 18-Apr-92, 32280 octets
- o Lors de la recherche d'une commande à l'aide de la variable "path"
- vérifie que l'objet trouvé est bien un fichier (et non un
- répertoire).
-
- v1.14 26-Apr-92, 32300 octets
- o Deux erreurs corrigées dans la substitution de commande :
- n'éliminait pas le "`" final, calcul de la longueur des arguments
- incorrect.
- o Une erreur corrigée dans le parcoureur : interprétait quand même
- les caractères "<>,;" s'ils étaient en première position dans une
- chaine entre quotes.
- o Messages en allemands revus
-
- v1.15 01-May-92, 32364 octets
- o Ajout de la variable "histfile".
- o Deux erreurs corrigées dans le calcul de la longueur des arguments
- : oubliait de compter les guillements ou les quotes, et de prévoir
- un peu de place supplémentaire pour les arguments "splités".
-
- v1.16 11-May-92, 32404 octets
- o commande "echo" revue : quand on met l'option -c supprime vraiment
- le '\n' final (i.e. ne le remplace pas par un espace)
-
- v1.20 16-May-92, 32568 octets
- o ajout des commandes "loadhist" et "writehist"
- o ajout de la forme "%Vnom" à la syntaxe du l'invite
- o modification du parcoureur : n'analyse la partie droite d'une
- commande composée qu'après avoir exécuté la partie gauche, et donc
- :
- - "cd ram: , delete *" donne le résultat attendu ("*" était étendu
- avant de faire le "cd")
- - toutes les commandes simples peuvent être des alias (et non plus
- seulement la première)
- - on peut écrire une boucle sur une seule ligne ("for i in 1 .. 50
- , echo $i , done" ne marchait pas, maintenant même "cd ram: , for
- i in *.c , echo $i , compress $i , done , echo fini" fonctionne !)
-
- v1.21 17-May-92, 32912 octets
- o ajout de la commande "time"
-
- v1.22 23-May-92, 32944 octets
- o bug corrigé dans la gestion des boucles "for...done" : lors de
- l'écriture des commandes dans le fichier temporaire, ne forçait
- pas une fin de ligne après chaque commande
-
- v1.23 01-Jun-92, 33328 octets
- o Plusieurs bugs corrigés dans la gestion des boucles "for...done"
- écrites sur une même ligne : "for i in 1 .. 5,echo $i,done"
- marche, ainsi que "for i in 1 .. 5 , list | wc , done"
- o Si trouve un fichier avec le bit "s" en cherchant une commande
- dans le chemin défini par la variable "path", lance
- automatiquement une commande "source" sur ce fichier.
- o La touche "^S" échange les deux caractères précédant le curseur.
- o Les touches "^D" et "<TAB>" sont utilisables sans préfixe, et donc
- en début de ligne ou après un espace.
- o Bug corrigé dans l'éditeur de ligne de commande: après un
- "shift-haut", les touches "haut" et "bas" ne donnaient pas les
- bonnes commandes.
-
- v1.30 14-Jun-92, 33932 octets
- o Plusieurs erreurs détectées par "Enforcer" et "Mungwall"
- corrigées.
- o Bug corrigé dans la commande "shift" : ne positionnait pas "argc"
- correctement.
- o Reconnait "$*" (remplacé par la liste des arguments séparés par un
- espace).
- o Ajout de l'option -f à la commande "read".
- o La variable "argc" est en lecture seulement.
- o Vérifie les noms de variables donnés aux commandes internes
- (interdit les pseudo-variables arguments).
- o Les spécifications "&[pri]" et "@pri" peuvent être indiquées
- n'importe où sur la ligne de commande.
-
- v1.40 26-Jun-92, 37764 octets
- o Recompilé avec le SAS/C 5.10b (avec pragmas et optimisation)
- o Peut être rendu résident (code "pure")
- o Enorme bug corrigé dans la fonction strxcat() (ne sauvegardait pas
- le registre a2)
- o Nombreuses modifications pour mieux tenir compte de la version du
- système, ainsi sous système 2.04 :
- - n'a plus besoin de "arp.library"
- - peut exécuter les programmes résidents/internes (ROM)
- - la commande "Execute" peut être utilisée
- o Modification de l'évaluateur d'expressions :
- - on peut indiquer des valeurs en hexa (0x1FD)
- - ajout des opérateurs "HEX", "<", ">", "&", et "|"
- o Ajout de l'option "-o" à la commande "if"
- o Bug corrigé dans la commande "if": n'appelait UnLock() dans
- certains cas d'erreur
-
- v1.41 30-Jun-92, 37864 octets
- o Correction dans la recherche des commandes: ne cherche plus le
- chemin si la commande est résidente
-
- v1.42 06-Jul-92, 37872 octets (Fish #706)
- o Bug corrigé dans la gestion des boucles "for...done": "oubliait"
- les redirections des commandes dans la boucle
- o Ne fait plus crier "Enforcer" quand on fait "!string" (ou
- "shift-haut" dans l'éditeur de lignes de commandes) et qu'aucune
- commande commençant par "string" ne se trouve dans l'historique
-
- v1.50 21-Aug-92, 37736 octets
- o Ajout de la variable globale "keys" (permet de modifier les
- fonctions des touches de contrôle sous l'éditeur de lignes de
- commande)
- o Accepte l'argument "FROM file"
- o Contrôles plus stricts au démarrage: proc->pr_CLI valide, pas de
- lancement depuis le WB, etc...
- o Bug corrigé dans l'évaluation des expressions: affichait le
- résultat en décimal même si on indiquait "HEX"
- o Bug corrigé sous système 1.3: ne donnait pas le chemin complet de
- la commande à la fonction qui lance l'exécution
-
- v1.51 01-Sep-92, 37804 octets
- o Bug corrigé dans la recherche du chemin: après exécution
- automatique d'un script (bit "s" détecté) les commandes suivantes
- étaient parfois considérées elles-aussi comme des scripts (et
- exécutées comme telles !!!)
- o La commande "history str" n'affiche que les commandes commençant
- par "str"
- o La commande "history" teste CTRL-C lors de l'affichage de
- l'historique
- o Affiche la commande retrouvée quand on utilise les formes "!!",
- "!n" ou "!str"
- o Bug corrigé: quand on faisait un "cd volume:" la variable $cwd
- n'avait pas de ':' à la fin (d'où problème par exemple quand on
- faisait "copy df0:toto $cwd")
- o Bug corrigé dans le complément de nom de fichier: distinguait
- minuscules et majuscules
-
- v1.52 22-Sep-92, 40000 octets (Fish #747)
- o La forme ${nom de var} est acceptée (permet par exemple "echo
- ${var}coucou")
- o Ajout des fonctions sur les variables (formes "$var:fonction" et
- "${var:fonction}")
- o Ajout du test "==" à la commande "if"
- o Sous système 2.0, la longueur des arguments n'est plus limitée
- o Bug corrigé: teste le bit "s" aussi quand on donne le chemin
- complet de la commande
- o Quelques bugs corrigés dans la gestion des boucles "for...done"
- o La variable $cwd se termine maintenant toujours soit par ":" soit
- par "/"
- o Si aucun fichier ne correspond à un motif, affiche un message
- d'erreur et n'exécute pas la commande
-
- v1.53 22-Sep-92, 40136 octets
- o Peut maintenant être utilisé avec "AUX:" comme terminal
- o Ajout de la variable "remote"
- o Les variables "cmdnum", "cwd", "status", "version" et "remote"
- sont désormais en lecture seulement
- o L'accès à la pile des répertoires se fait avec "§no" au lieu de
- "=no" (plus besoin de protéger le "=" pour la commande "if")
-
- v1.54 05-Oct-92, 40120 octets
- o Plus de blocages de l'éditeur de lignes de commandes
- o Bug corrigé: n'arrivait pas à exécuter une commande sur un volume
- dont le nom comportait des espaces
- o Bug corrigé: en cas d'erreur de syntaxe sur une des formes !!, !n
- ou !str, exécutait quand même la commande
-
- v1.55 23-Oct-92, 40764 octets
- o Ajout de la forme "for var from file"
- o Lors du lancement d'une commande en arrière plan, tout canal qui
- n'a pas déjà été redirigé est redirigé vers "NIL:"
- o Si la variable "truepipes" vaut "1", utilise "PIPE:" pour gérer
- les tubes (sous système 2.0 uniquement)
- o Ajout des fonctions "base" et "noext"
-
- v2.00 03-Feb-93, 37744 octets
- o Recompilé avec le SAS/C 6.2.
- o Ne fonctionne plus que sous système 2.0 et plus
- o Complètement localisé.
-
- v2.01 07-Mar-93, 37988 octets
- o Se termine si on clique sur le gadget de fermeture de la fenêtre
- o Construction de la chaine d'argument modifiée (ajoute un espace
- avant, et non après)
- o On peut avoir un '%' dans l'invite ou le titre de la fenêtre, en
- indiquant '%%'
-
- v2.02 28-Mar-93, 38020 octets
- o Bug corrigé: dans la forme "if str = str", si la première chaine
- commençait par un "-", l'interprétait comme une forme "if -test
- ..." sans aucun contrôle
-
- v2.03 13-Apr-93, 38060 octets
- o Lors du complètement des noms de fichiers, ajoute automatiquement
- un '/' si c'est un répertoire ou un ' ' si c'est un fichier
-
- v2.04 04-May-93, 38268 octets
- o Ajout de la fonction "split"
-
- v3.00 14-May-93, 39336 octets
- o Parcoureur entièrement ré-écrit ("$toto:split" en début de ligne
- marche désormais, etc...)
- o Gestion des alias modifiée :
- - les définitions NE DOIVENT PLUS être entre quotes simples
- - les définitions peuvent utiliser %1, %2,... %9 pour indiquer la
- position des arguments (la spécification [] est toujours reconnue)
- o Editeur de lignes de commandes modifié :
- - plus de problèmes avec les commandes de plus d'une ligne
- - le complètement de nom de fichiers marche au milieu d'un mot
- - les fonctions "début d'historique" et "fin d'historique"
- marchent correctement
- o Lors du lancement automatique d'un script (bit "s") essaye de
- deviner son type (AREXX, AUSH ou autre)
-
- v3.10 25-May-93, 45964 octets
- o Se compile et s'exécute sous UNIX
- o Ajout de la fonction "expand", de la commande "window"
- o La commande "time" fonctionne à nouveau
- o Si un code d'erreur ne correspond à aucun des messages prévus dans
- le catalogue, appelle la fonction Fault() pour avoir le libellé
- o Erreur corrigée dans les catalogues (TOUS !)
- o Plusieurs erreurs corrigées ("echo" sans arguments, complètement
- avec curseur en fin de mot, contrôle des noms de variable, etc...)
-
- v3.11 01-Jun-93, 46388 octets
- o Sur Amiga, ne perd plus les caractères tapés à l'avance
- o "window" sans arguments indique la position et la taille de la
- fenêtre
-
- v3.12 17-Jun-93, 46396 octets
- o Erreur corrigée: interprétait ',' et '|' en début de chaine entre
- '' ou "" ou en début de contenu de variable
- o Erreur corrigée: dans un script, une ligne vide était traitée
- comme fin de fichier
-
- v3.13 27-Jun-93, 46472 octets
- o Quelques modifications pour faciliter/améliorer la compilation
- sous UNIX
- o Sous UNIX, l'invite par défaut ne contient plus de séquences ANSI
- o Ajout de la spécification "%b" pour la définition de l'invite
-
- v3.14 10-Jul-93, 46588 octets
- o Compilé avec le SAS/C 6.3
- o L'appel de la requête de fichier causait un "hit" avec Enforcer
- o Correction d'une erreur dans le parcoureur (remplacement de '*'
- par '#?' fait plus proprement)
- o La commande NewAUSH retourne 0 et non 1
-
- v3.15 25-Jul-93, 46608 octets
- o Le nombre maximal d'argument pour les commandes passe à 128 (au
- lieu de 64)
- o Erreur corrigée dans le parcoureur: $i, "toto" et 'titi' n'étaient
- pas reconnus correctement après un symbole de redirection ('>' ou
- '<', par exemple "toto > $i" ne marchait pas).
- o Erreur corrigée: "cd" ne changait plus cli_SetName sous AmigaDOS.
-
- v3.16 08-Apr-94, 46644 octets
- o Recompilé avec le SAS/C 6.51 (corrige quelques erreurs)
-
- v3.17 01-Jul-94, 46608 octets
- o Erreur corrigée: "NewAUSH" ne gérait pas correctement les
- arguments
-