|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre confirmé
![]() Inscription : avril 2008 Messages : 188 ![]() |
Bonjour,
je voudrais que mon ~/.kshrc puisse être le même pour du ksh que pour du bash. Pour cela, j'ai mis les fonctions spécifiques bash à la fin, après un return si le shell est un ksh. ça marche bien sous Linux 2.6.18-128.7.1.el5 (KSH_VERSION='@(#)PD KSH v5.2.14 99/07/13.2'), mais ça ne marche pas sous AIX (je ne sais pas quelle version de pdksh) car ce dernier vérifie manifestement la syntaxe de TOUT le fichier avant de commencer à le sourcer!!! Est-il possible d'inhiber ce comportement? Voici un exemple hyper-simplifié avec une erreur de syntaxe volontaire pour illustrer le problème: Code :
ça me convient parfaitement. Et voici le comportement sous AIX: Code :
Quelqu'un a-t-il une idée pour changer ce comportement? Merci d'avance )jack( |
||||
|
|
10
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() francois Ingénieur systèmes et réseaux Inscription : juillet 2006 Messages : 3 538 ![]() |
a ma connaissance on peut pas changer ce comportement sous AIX, mais un second avis devrai confirmer.
|
|
|
00
|
|
|
#3 |
|
Expert Confirmé Sénior
![]() Laurent WillemsExpert Stop/Start Inscription : septembre 2002 Messages : 2 551 ![]() |
Salut,
Je ne comprends pas très bien ta logique. Pourquoi vouloir à tout prix masquer un problème plutôt que d'essayer de le corriger?
__________________
Alea Jacta Test! |
|
|
10
|
|
|
#4 | |||||
|
Membre confirmé
![]() Inscription : avril 2008 Messages : 188 ![]() |
Citation:
En fait, j'ai 2 besoins: -1- debeuguer un programme ksh J'ai un "script.ksh" qui "charge" plein de fichiers de fonctions et contient (entre autres): Le fichier "script_avec_bug.ksh" (de plusieurs centaines de lignes) contient une erreur de syntaxe pas évidente à trouver (genre un backquote unique à l'intérieur d'un "$( ...`...)", par exemple). Lorsque j'exécute "script.ksh" sous AIX, j'ai un (laconique) message qui ne me renseigne pas sur l'endroit du bug! Et l'option "set -x" ou l'insertion de traces ne fonctionne pas. En fait, on a déjà résolu un problème semblable par dichotomie (en supprimant la moitié des fonctions, puis le quart, etc.), mais c'est beaucoup plus fastidieux qu'un simple "set -x" au début du fichier! -2- ~/.kshrc je voudrais bien avoir un unique fichier ~/.kshrc qui fonctionne aussi bien pour un ksh que pour un bash. Pour cela, j'ai mis les fonctions spécifiques bash à la fin, après un return si le shell est un ksh: Code :
S'il est vraiment impossible de changer le comportement du ksh sous AIX, j'aurai toujours la ressource d'abandonner le souhait d'avoir un unique fichier (facile à transporter de machine en machine et à administrer) pour le remplacer par 3 fichiers (après vérification): Code :
Merci de votre patience! )jack( |
|||||
|
|
10
|
|
|
#5 | |||||||||
|
Expert Confirmé Sénior
![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 055 ![]() |
Citation:
Tu peux aussi essayer d'identifier grossièrement la zone (style une trentaine de lignes) qui pourraient contenir le bug et mettre "set -x" en début de cette zone et "set +x" après... Citation:
Code bash :
Citation:
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
|||||||||
|
|
10
|
|
|
#6 | ||
|
Membre confirmé
![]() Inscription : avril 2008 Messages : 188 ![]() |
Citation:
Je te rappelle que c'est une erreur de syntaxe et non un bug et que le pdksh d'AIX n'exécute AUCUNE ligne tant qu'il reste des erreurs de syntaxe! Pas même un "set -x" ni un "echo". C'est ce que j'explique dans mon premier message et c'est précisément ce comportement que je cherche à modifier! Je voudrais bien pouvoir mettre un "set -x" ou un "echo" dans mon fichier pour localiser l'erreur de syntaxe! Oops! Note importante: je viens de refaire un essai et j'ai été surpris de le voir exécuter les premières lignes d'un nouveau fichier de test contenant des erreurs de syntaxe... puis je me suis aperçu que j'avais fait (quasiment sans y penser) un "chmod +x test.ksh". Or, c'est précisément ce qu'il ne faut pas faire! En fait, ce comportement particulier se produit uniquement lorsqu'on SOURCE le fichier et non lorsqu'on l'exécute. (Évidemment, il est clair que c'est beaucoup moins clair en ksh qu'en csh!) Sve@r, peux-tu me confirmer que tu as bien sourcé et non exécuté ton fichier de test? Citation:
)jack( |
||
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Ingénieur développement logiciels Inscription : octobre 2008 Messages : 1 378 ![]() |
J'ai le même comportement que toi. Lorsque le fichier est sourcé (et seulement dans ce cas), le ksh d'AIX n'exécute rien si le fichier contient une erreur de syntaxe.
Par contre tu peux contourner le problème en ne gardant que la partie commune dans ton script principal. Tu met les parties spécifiques ksh et les parties spécifiques bash dans deux fichier séparés, que tu source dans le fichier principal suivant le shell que tu utilises. En effet il ne semble que ksh ne vérifie syntaxiquement que le fichier sourcé, pas les fichiers sourcés par le fichier sourcé. |
|
|
00
|
|
|
#8 | |||
|
Membre confirmé
![]() Inscription : avril 2008 Messages : 188 ![]() |
Citation:
Citation:
Le problème, c'est pour trouver un bug dans un gros script qui source plein de scripts (dont un assez gros avec une erreur de syntaxe!). Si le cas se présente de nouveau, plutôt que de faire par dichotomie (ce qui nous a pris du temps), j'essaierai de voir si je peux exécuter le programme, mais je doute que ça marche... Citation:
Si je source A, il vérifie A avant son "sourçage" (exécution des instructions de A dans l'environnement du process courant). Si au cours du "sourçage" de A, il "tombe" sur l'instruction ". B", alors, avant de commencer à sourcer B, il en vérifie la syntaxe puis, si c'est bon, il le source, sinon il sort en erreur (je n'ai pas essayé de mettre un trap ERR ni EXIT). Cependant, si le code de A contient une instruction ". C" mais que le sourçage de A ne passe jamais par cette instruction, alors il ne va pas vérifier la syntaxe de C. Ça semble assez logique, vu que le fichier pourrait même ne pas exister: Code :
if [[ -r "$file" ]]; then . "$file"; fi )jack( |
|||
|
|
00
|
|
|
#9 | ||||
|
Expert Confirmé Sénior
![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 055 ![]() |
Citation:
Citation:
Code bash :
Pour tester tu appelles ton script en lui passant le mot clef "main" et une fois qu'il est ok alors tu le sources...
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com