home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The CDPD Public Domain Collection for CDTV 4
/
CDPD_IV.bin
/
fish
/
911-930
/
ff917
/
aush
/
aush.doc
< prev
next >
Wrap
Text File
|
1994-05-05
|
50KB
|
1,066 lines
AUSH - Manuel de référence
AboutThisDoc
Ce manuel décrit la version 3.15 de l'utilitaire AUSH. Ce programme
est (c)1992-1993 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
Boite 71
6, rue des cailloux
92110 CLICHY - 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.
En France, la dernière version de ce programme est disponible auprès
de Serge HAMMOUCHE, 3 rue Anatole France, 13220 Chateauneuf-les-Martigues.
Pour recevoir le catalogue complet, il vous suffit d'envoyer deux timbres à
cette adresse.
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.