Si je modifie le #!/bin/ksh par #!/bin/sh
j'ai la meme erreur
Si je le lance par
$ ksh script
il fonctionne.
Un autre script
#! /bin/ksh
echo "test"
fonctionne indifferement
. ./script2
ksh script2
Il n'y a aucun probleme de droits nulle part.
J'ai pense a un caractere invisible en debut de
fichier qui provoquerait ce bug. J'ai supprime
la premiere ligne et ajoute un nouveau #! /bin/ksh
mais ca n'arrange rien.
Dans un autre script qui fonctionne, j'ai remarque
des caracteres:
# =3D> cr=C5=C5 par le script...
Serait-ce un probleme d'encodage UTF-8 / ISO ?
Comment corriger ca?
Si je modifie le #!/bin/ksh par #!/bin/sh j'ai la meme erreur
Si je le lance par $ ksh script il fonctionne.
Un autre script #! /bin/ksh echo "test"
fonctionne indifferement . ./script2 ksh script2
Il n'y a aucun probleme de droits nulle part. J'ai pense a un caractere invisible en debut de fichier qui provoquerait ce bug. J'ai supprime la premiere ligne et ajoute un nouveau #! /bin/ksh mais ca n'arrange rien.
pour voir les caracteres invisibles sous vi faire :set list
Dans un autre script qui fonctionne, j'ai remarque des caracteres: # => crÅÅ par le script...
Serait-ce un probleme d'encodage UTF-8 / ISO ? Comment corriger ca?
Merci
Bonjour,
j'ai un comportement extremement curieux avec un script:
Si je modifie le #!/bin/ksh par #!/bin/sh
j'ai la meme erreur
Si je le lance par
$ ksh script
il fonctionne.
Un autre script
#! /bin/ksh
echo "test"
fonctionne indifferement
. ./script2
ksh script2
Il n'y a aucun probleme de droits nulle part.
J'ai pense a un caractere invisible en debut de
fichier qui provoquerait ce bug. J'ai supprime
la premiere ligne et ajoute un nouveau #! /bin/ksh
mais ca n'arrange rien.
pour voir les caracteres invisibles sous vi faire :set list
Dans un autre script qui fonctionne, j'ai remarque
des caracteres:
# => crÅÅ par le script...
Serait-ce un probleme d'encodage UTF-8 / ISO ?
Comment corriger ca?
Si je modifie le #!/bin/ksh par #!/bin/sh j'ai la meme erreur
Si je le lance par $ ksh script il fonctionne.
Un autre script #! /bin/ksh echo "test"
fonctionne indifferement . ./script2 ksh script2
Il n'y a aucun probleme de droits nulle part. J'ai pense a un caractere invisible en debut de fichier qui provoquerait ce bug. J'ai supprime la premiere ligne et ajoute un nouveau #! /bin/ksh mais ca n'arrange rien.
pour voir les caracteres invisibles sous vi faire :set list
Dans un autre script qui fonctionne, j'ai remarque des caracteres: # => crÅÅ par le script...
Serait-ce un probleme d'encodage UTF-8 / ISO ? Comment corriger ca?
Merci
octane
écrit:
j'ai un comportement extremement curieux avec un script:
### (snip une dizaine de ligne de commentaires) et
tput() { echo "" return }
Et d'autres definitions de fonctions.
Mais le hic, c'est que je peux mettre un echo des la deuxieme ligne et le script plante. Si je l'appelle par ksh ./script tout fonctionne
Apparement, il a trouvé une parenthèse. Où est t'elle ?
J'ai creuse cette piste et chaque parenthese est fermee.
see
wrote:
Mais le hic, c'est que je peux mettre un echo des la deuxieme ligne et le script plante. Si je l'appelle par ksh ./script tout fonctionne
J'ai fait quelques tests et la conclusion d'impose : - Lorsque le script est sourcé avec . ./script, le parsing est effectué sur la totalité du script *avant* de commencer l'exécution. En clair, si le script contient une erreur de syntaxe, une erreur sera affiché et le script ne sera pas du tout exécuté.
- Lorsque le script est exécuté dans un sous-process, le parsing s'effectue au fur et à mesure de l'exécution. Une erreur de syntaxe sera remonté uniquement s'il est nécessaire, lors de l'exécution, d'examiner cette ligne.
Exemple : # L'erreur est à la fin du script, dans le cas d'une exécution, la ligne ne sera jamais exécuté.
= Contenu du script : $ cat script #! /bin/ksh
echo "debut" exit (
= Exécution dans un sous-process = Le shell n'a pas étudié la ligne fautive et n'affiche donc aucune erreur. $ ksh ./script debut
= Exécution dans le même process = Le shell a vérifié la syntaxe de la totalité du script avant même de commencer l'exécution $ . ./script ksh: .: syntax error: `(' unmatched $
Apparement, il a trouvé une parenthèse. Où est t'elle ?
J'ai creuse cette piste et chaque parenthese est fermee.
Le shell te dit le contraire. Revérifie. -- Bruno http://errance.lirano.net (photographies)
<octane@alinto.com> wrote:
Mais le hic, c'est que je peux mettre un echo des la
deuxieme ligne et le script plante.
Si je l'appelle par ksh ./script tout fonctionne
J'ai fait quelques tests et la conclusion d'impose :
- Lorsque le script est sourcé avec . ./script, le parsing est effectué
sur la totalité du script *avant* de commencer l'exécution. En clair, si
le script contient une erreur de syntaxe, une erreur sera affiché et le
script ne sera pas du tout exécuté.
- Lorsque le script est exécuté dans un sous-process, le parsing
s'effectue au fur et à mesure de l'exécution. Une erreur de syntaxe sera
remonté uniquement s'il est nécessaire, lors de l'exécution, d'examiner
cette ligne.
Exemple :
# L'erreur est à la fin du script, dans le cas d'une exécution, la ligne
ne sera jamais exécuté.
= Contenu du script :
$ cat script
#! /bin/ksh
echo "debut"
exit
(
= Exécution dans un sous-process
= Le shell n'a pas étudié la ligne fautive et n'affiche donc aucune
erreur.
$ ksh ./script
debut
= Exécution dans le même process
= Le shell a vérifié la syntaxe de la totalité du script avant même de
commencer l'exécution
$ . ./script
ksh: .: syntax error: `(' unmatched
$
Apparement, il a trouvé une parenthèse. Où est t'elle ?
J'ai creuse cette piste et chaque parenthese est fermee.
Le shell te dit le contraire. Revérifie.
--
Bruno
http://errance.lirano.net (photographies)
Mais le hic, c'est que je peux mettre un echo des la deuxieme ligne et le script plante. Si je l'appelle par ksh ./script tout fonctionne
J'ai fait quelques tests et la conclusion d'impose : - Lorsque le script est sourcé avec . ./script, le parsing est effectué sur la totalité du script *avant* de commencer l'exécution. En clair, si le script contient une erreur de syntaxe, une erreur sera affiché et le script ne sera pas du tout exécuté.
- Lorsque le script est exécuté dans un sous-process, le parsing s'effectue au fur et à mesure de l'exécution. Une erreur de syntaxe sera remonté uniquement s'il est nécessaire, lors de l'exécution, d'examiner cette ligne.
Exemple : # L'erreur est à la fin du script, dans le cas d'une exécution, la ligne ne sera jamais exécuté.
= Contenu du script : $ cat script #! /bin/ksh
echo "debut" exit (
= Exécution dans un sous-process = Le shell n'a pas étudié la ligne fautive et n'affiche donc aucune erreur. $ ksh ./script debut
= Exécution dans le même process = Le shell a vérifié la syntaxe de la totalité du script avant même de commencer l'exécution $ . ./script ksh: .: syntax error: `(' unmatched $
Apparement, il a trouvé une parenthèse. Où est t'elle ?
J'ai creuse cette piste et chaque parenthese est fermee.
Le shell te dit le contraire. Revérifie. -- Bruno http://errance.lirano.net (photographies)
octane
Apparement, il a trouvé une parenthèse. Où est t'elle ?
J'ai creuse cette piste et chaque parenthese est fermee.
Le shell te dit le contraire. Revérifie.
J'ai reverifie. Il n'y a pas de parentheses. Par contre, ce matin, le script fonctionne. Incomprehensible (???)
Eventuellement, un ligne de 90 caracteres qui finit par blablabla.. Longu <-- un saut de ligne au 80e caractere que je n'ai pas vu? eur)
Peut etre le saut de ligne mal interprete (?) ou quelqu'un qui a modifie le script derriere moi (plus probable).
En tout cas merci.
Apparement, il a trouvé une parenthèse. Où est t'elle ?
J'ai creuse cette piste et chaque parenthese est fermee.
Le shell te dit le contraire. Revérifie.
J'ai reverifie. Il n'y a pas de parentheses.
Par contre, ce matin, le script fonctionne. Incomprehensible (???)
Eventuellement, un ligne de 90 caracteres qui finit par
blablabla.. Longu <-- un saut de ligne au 80e caractere que
je n'ai pas vu?
eur)
Peut etre le saut de ligne mal interprete (?) ou quelqu'un qui a
modifie le script derriere moi (plus probable).