existe-t-il un moyen de définir le mode de débogage ( SET -X CODE> ) sur un script Kornshell (ksh) dans le monde entier? Actuellement, il semble que j'ai fait quelque chose comme ce qui suit:
dev2:/home/me-> ./testSetX + a This is A! + echo Outside Outside + b This is B! dev2:/home/me->
5 Réponses :
Ajoutez-le à votre ligne Shebang: ou réglez-le en haut de votre script: p> ou démarrez votre script de la ligne de commande: p>
Malheureusement, rien de ces travaux pour moi. Je ne vois que les noms des méthodes. C'est peut-être parce que j'utilise ksh88.
Ceci est ksh88 sur une machine HP-UX: Ça sûr looks em> comme ça fonctionne bien. J'ai validé que cela fonctionne également avec un "SET -X" n'importe où avant la première application de fonction. P> J'ai déplacé dans un système AIX et a connu le problème que vous avez décrit. Lorsque les fonctions sont définies comme une fonction Par conséquent, vous pourrez peut-être changer temporairement l'interprète sur KSH93 pour le débogage. Ensuite, puis retournez à KSH88 si vous n'aimez pas avoir les matrices plus longues, les tableaux associatifs, les mathématiques de point flottant, le support d'espace de noms et une amélioration de la vitesse de l'exécution de Rougly 10x. ;) Parce que cela semble que la réponse est "Non, tu ne peux pas faire ça" avec ksh88 sur Aix. : ( p> p> un { code> ou
a () { code> dans aix ksh88, le
SET -X code> ne semble pas reporter dans la fonction de fonction locale. Passer à KSH93 sur la même boîte AIX, fonctions déclarées à l'aide de la nouvelle fonction
La syntaxe { code> Ne transportez pas non plus l'extérieur
SET -X code> dans la portée intérieure. Cependant, KSH93 se comporte comme POSIX SH (et KSH88 sur d'autres plates-formes) utilisées pour se comporter, portant le
SET -X code> à la fonction lorsque la fonction est définie dans l'ancien
a () {< / code> méthode. Ceci est probablement dû à la compatibilité à l'envers de KSH93, où il essaie d'imiter l'ancien comportement lorsque des fonctions sont définies à l'ancienne. P>
Merci pour la grande recherche, je verrai d'être mis à niveau vers Ksh93, mais dans mon environnement ...
IBM fournit ksh93 et ksh88 dans le même paquet (au moins ils font sur les systèmes AIX 5.3 et 6.1 que j'ai examinés); Le binaire est juste appelé ksh93. Si cela aide ... :)
Sachez que le scopage est affecté entre les deux types de déclarations de fonction vs. p> en particulier, le typset sous Ksh ne fonctionne pas comme vous l'attendez dans l'ancien cas. Découvert en essayant de déboguer un script avec une fonction récursive. Plus d'informations ici: P> http: //www.dartmouth .edu / ~ rc / classes / ksh / fonctions.html p> p>
Le comportement de "Set -X" est une "particularité" de la coque Aix (ne pas dire cerveau d ...).
Vous avez demandé "un moyen de définir le mode de débogage ... globalement" .
Voici ce que je fais pour atteindre cet objectif: p> pour activer le traçage, définir toutes ces utilisations de " Un autre exemple d'une coquille AIX "particularité": p> the ci-dessus doit imprimer "piégé au niveau de la portée du fichier" , mais ne imprime rien. P> p> $ set_x code> dans l'environnement de votre script sur "
défini -x code> ".
Pour contrôler cela sur une base téléphonique, préfixez l'appel avec "
set_x = 'SET -X' code>".
Comme une variable d'environnement est utilisée, cette méthode fonctionne naturellement avec des appels imbriqués. P>
$ set_x; code>" sont un peu laids, mais cela fonctionne avec tous les coquilles,
et la prestation l'emporte généralement sur le coût. P>
J'ai testé un ensemble global comme solution de contournement, vous pouvez activer la traçabilité de la commande locale pour toutes les fonctions de portée (après leur définition) et avant qu'elles ne soient appelées via Typeset Code>: P> SET -X code> avec KSH88 (sur Solaris 10) et KSH93 (Fedora 17) et avec une commande globale
SET -X code> en haut de Le script n'a pas de portée locale (c.-à-d. Il n'a pas d'effets locaux).
$ bash test.ksh
15: foo
6: echo Hello
Hello
16: bar
10: echo World
World
+1 Cela a fonctionné pour moi en utilisant KSH88 sur AIX 5.3 et 7.1. Ce serait bien s'il y avait plus d'explication de la manière dont les œuvres de composition.
C'est bizarre. Je viens aussi de l'essayer dans ksh88 (et ksh93) sur l'un de mes systèmes AIX et que je reçois le BeHvior décrit. Mais le ksh88 sur mes systèmes HP-UX fonctionne comme vous le souhaitez. J'ai modifié ma réponse pour refléter les résultats.
fyi, ksh88
/ usr / bin / ksh code> sur Solaris 10 montre également le comportement décrit (aucun effet global
SET -X code>).