• [^] # Re: C'est bien de savoir à quoi ca sert...

    Posté par . En réponse au journal Python ca put. É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