OVH Cloud OVH Cloud

Script ksh sur Sun bloquant.

5 réponses
Avatar
octane
Bonjour,

j'ai un comportement extremement curieux avec un script:

$ . ./script
ksh: syntax error: `(' unexpected
$ head -3 script
#! /bin/ksh

echo "debut"

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?

Merci

5 réponses

Avatar
Laurent Wacrenier
écrit:
j'ai un comportement extremement curieux avec un script:

$ . ./script
ksh: syntax error: `(' unexpected
$ head -3 script
#! /bin/ksh

echo "debut"



Y'a quoi dans la suite ?
Apparement, il a trouvé une parenthèse. Où est t'elle ?

Avatar
[SauronDeMordor]
Bonjour,

j'ai un comportement extremement curieux avec un script:

$ . ./script
ksh: syntax error: `(' unexpected
$ head -3 script
#! /bin/ksh

echo "debut"

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



Avatar
octane

écrit:
j'ai un comportement extremement curieux avec un script:

$ . ./script
ksh: syntax error: `(' unexpected
$ head -3 script
#! /bin/ksh

echo "debut"



Y'a quoi dans la suite ?


#! /bin/ksh

### (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.


Avatar
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)


Avatar
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.