Journal Python ca put

Posté par  (site web personnel) .
Étiquettes : aucune
0
6
déc.
2004
Ca ne sais même pas utiliser le shellbang

skarsnik@gobbla:~/Data/devel/toyunda-tools$ head -n 1 toyunda.pl
#!/usr/bin/perl
skarsnik@gobbla:~/Data/devel/toyunda-tools$ head -n 1 toyunda.rb
#!/usr/bin/env ruby
skarsnik@gobbla:~/Data/devel/toyunda-tools$ perl toyunda.pl

usage :
toyunda.pl [options] file.ini
[SNIP]
skarsnik@gobbla:~/Data/devel/toyunda-tools$ ruby toyunda.pl

usage :
toyunda.pl [options] file.ini
[SNIP]
skarsnik@gobbla:~/Data/devel/toyunda-tools$ ruby toyunda.rb
Usage: toyunda.rb {file.ini,playlist,part of name} [MPLAYER_OPTIONS] [--amphi4=n]
[SNIP]
skarsnik@gobbla:~/Data/devel/toyunda-tools$ perl toyunda.rb
Usage: toyunda.rb {file.ini,playlist,part of name} [MPLAYER_OPTIONS] [--amphi4=n]
[SNIP]
skarsnik@gobbla:~/Data/devel/toyunda-tools$ python toyunda.pl
File "toyunda.pl", line 4
use strict;
^
SyntaxError: invalid syntax
skarsnik@gobbla:~/Data/devel/toyunda-tools$ python toyunda.rb
File "toyunda.rb", line 36
module Toyunda
^
SyntaxError: invalid syntax


C'est vraiment nul ce langage, ça sert vraiment à rien.
  • # Ouais c k3 de l4 merdeuh !

    Posté par  (site web personnel) . Évalué à 10.

    cedric@lef:~/tmp$ cat hello.pl
    #! /usr/bin/env perl
    print "Hello World\n";
    cedric@lef:~/tmp$ bash hello.pl
    Warning: unknown mime-type for "Hello World\n" -- using "application/*"
    Error: no such file "Hello World\n"

    bash c'est pourri, ça sert vraiment à rien !
  • # C'est bien de savoir à quoi ca sert...

    Posté par  . Évalué à 5.

    Le Shellbang comme tu l'appelles sert à mon avis aux interpréteurs genre bash, csh, .... afin de savoir quel interpréteur de script utiliser lorsque un script utilisant cette fonctionnalité est rendu exécutable puis exécuté.
    Par exemple pour un script sans extension.
    Alors "Python ca put", c'est pas francais, et faut pas etre malin pour tirer des conclusions de ce genre sur des erreurs comme cela.
    • [^] # Re: C'est bien de savoir à quoi ca sert...

      Posté par  . Évalué à 10.

      Ton avis est faux. C'est le noyau qui s'occupe de tout ca

      Par exemple sous FreeBSD :
      http://fxr.watson.org/fxr/source/kern/imgact_shell.c?v=RELENG53#L40(...)

      Fait le test de faire un execv(2) sur un script exectuable.


      > Par exemple pour un script sans extension.

      Quel rapport ? Depuis quand sous UNIX l'extension sert a quelque chose ? (hormis peut etre aux explorateurs de fichiers). ./toto ou ./toto.sh ou ./toto.pl c'est la même chose
      • [^] # Re: C'est bien de savoir à quoi ca sert...

        Posté par  . Évalué à -1.

        Eh bien j'ai rien compris à ton exemple BSD....
        De plus, je fais rarement exécuter des scripts directement au noyau, en général je laisse faire ça à mon bash.
        Par contre c'est vrai que j'ai certainement commis une bourde en parlant des extensions, c'est pas le reflet de ma pensée, c'est difficile à dire... :)
        • [^] # Re: C'est bien de savoir à quoi ca sert...

          Posté par  . Évalué à 8.

          Non c'est bien le noyeau qui s'en occupe : bash se contenete de faire un appel noyau sur le fichier a excecuter...

          Voir dans linux/fs/.... pour plus d'info ...
        • [^] # Re: C'est bien de savoir à quoi ca sert...

          Posté par  . Évalué à 10.

          $cat shell.c
          #include <unistd.h>

          int main(int argc, char **argv) {
          if (execl(argv[1], NULL) < 0)
          return 1;

          return 0;
          }

          $gcc -o shell shell.c
          $ cat < toto.sh
          #!/bin/sh

          echo "Hello !"
          ^D
          $./shell toto.sh
          Hello !

          Voila ce que fait un shell. Tu fais TOUJOURS executer tes scripts directement au noyau. Lorsque tu fais un exec*(2) sur un executable le noyau regarde a quel type d'executable il a a faire. Souvent c'est de l'ELF, mais ca peut aussi etre du a.out, XXX ou du script shell. Dans ce cas il repere la sequence magique #! et lance l'interpreteur.

          D'ailleur dans linux c'est la http://fxr.watson.org/fxr/source//fs/binfmt_script.c?v=linux-2.6.9#(...) tu as une fonction, search_binary_handler, qui parcours l'ensemble des formats reconnus par le noyau et regarde si ca correspond a ton fichier. La tu as les actions prises par le noyau si il recontre un script qui commence par un shebang. (C'est un peu pas tres lisible certe)

          Derriere chaque lancement d'un programme tu as forcement un appel a execve() du noyau. Le role du shell c'est simplement de te fournir une invite de commande et des moyens d'edition de cette invite plus ou moins evolués
  • # Tout simplement...

    Posté par  . Évalué à 6.

    Et pourquoi pas tout simplement :
    ./toyunda.pl
    ./toyunda.rb

    Je vois pas l'intérêt de définir un shellbang perl pour lancer un programme perl depuis ruby. C'est super tordu ton truc là !
    Le shellbang sert à lancer un script (avec les droits d'exécution) directement depuis bash sans préciser l'interpréteur à utiliser. Pour l'utilisateur, ca le fait ressembler à n'importe quel exécutable compilé.

    Pour Python :
    skarsnik@gobbla:~/Data/devel/toyunda-tools$ head -n 1 toyunda.py
    #!/usr/bin/python

    Puis:
    ./toyunda.py

    Et tout va bien :-)

    <mon avis>C'est plutôt du coté de ton utilisation des shellbang qu'est le problème...</mon avis>
  • # Shebang

    Posté par  . Évalué à 5.

    Juste pour corriger l'erreur que tout le monde répète : on dit shebang, pas shellbang.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.