Re: bash et lancement script python
Le 23 avril 2011, Jean-Jacques Doti a écrit :
> Salut,
>
> On Sat, 23 Apr 2011 17:03:29 +0200, Alain Rpnpif wrote:
> > Bonjour,
> >
> > Depuis toujours quand je mettais en première ligne d'un script python
> > :
> > #!/usr/bin/python
> >
> > Python était lancé sur le script.
> > Pourquoi maintenant (Debian Squeeze), la commande ./monscript.py
> > donne :
> > line 1: #!/usr/bin/python: Aucun fichier ou dossier de ce type
> >
> > $ sh ./monscript.py
> > ./monscript.py: 1: #!/usr/bin/python: not found
> >
> > $ bash ./monscript.py
> > ./monscript.py: line 1: #!/usr/bin/python: Aucun fichier ou dossier
> > de ce type
> >
> > $ which python
> > /usr/bin/python
> >
> > python monscript.py marche. Je ne comprends pas.
> > Auriez-vous une explication ?
>
> À tout hasard, est-ce que ton script aurait pu transiter par une
> machine Windows ou bien être transmis par mail ?
>
> Dans ce cas, il est possible que les fins de ligne Unix (LF) aient été
> remplacés par des fins de ligne Windows (CR-LF). Si c'est le cas, la
> première ligne de ton script est vue comme
> #!/usr/bin/python<CR>
> et c'est donc "/usr/bin/python<CR>" qui est cherché au lieu de
> "/usr/bin/python".
>
> Pour vérifier, affiche ton script avec un éditeur hexadécimal (ou tape
> "od -c -tx1 monscript.py" dans un terminal) et regarde si les "\n" sont
> précédés par des "\r".
>
> Au pire, lance simplement un "dos2unix monscript.py" : si le soucis est
> bien là, ça le réglera (et quoi qu'il en soit, ça ne casse rien).
Merci Jean-Jacques.
Le problème était bien de ce style : des octets non affichables mais en
début de fichier !
Le fichier litigieux :
00000000 EF BB BF 23 │ 21 2F 75 73 │ 72 2F 62 69 │ 6E 2F 70 79 . #!/usr/bin/py
00000010 74 68 6F 6E │ 0A thon
Un fichier qui se lance normalement :
00000000 23 21 2F 75 │ 73 72 2F 62 │ 69 6E 2F 70 │ 79 74 68 6F #!/usr/bin/pytho
00000010 6E 0A n
C'est de ma faute : je l'avais affiché avec Abiword et bêtement enregistré ce qui a ajouté ces caractères (il aurait dû le laisser en format brut).
Un truc marrant : la commande file affiche ceci
1: Python script text executable
2: a /usr/bin/python script text executable
ce qui a pu trompé.
Encore merci.
--
Alain Rpnpif
Reply to: