[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [linux] shell
bon et bien dit. Resumons:
supposons le script "monscript" au aurait comme premiere ligne "#!/bin/sh". Pour le lancer, deux cas de figure
1) ce script est marque executable (chmod a+x monscript) et on le lance avec ./monscript ou simplement script (s'il est dans le PATH).
le shell ou dans lequel on tape la commande ./monscript se scinde en deux avec fork() puis le processus fils appelle execve() avec "monscript" en argument. execve() dit au kernel d'executer "monscript". Le kernel analyse les premiers bytes du fichier et voit #! Il sait donc qu'il doit en fait lancer le programme sur la fin de cette ligne (ici, /bin/sh) avec comme argument le script lui meme.
Nous tombons alors dans le cas de figure 2
2) le script est lance avec la command "sh monscript".
Comme dans (1), le shell courant fork() et le processus fils donne _sh_ comme parametre a execve(). sh est execute, il lit le script et ignore la premiere ligne car elle demarre avec le caractere de commentaire (#). sh execute les commandes du script.
Donc en appliquant la recette sur le probleme de depart:
on a un script "monscript" qui a comme premiere ligne "#!/bin/bash" et on lance le script avec "tcsh monscript" depuis un shell korn (par exemple). Dans ce cas, le korn shell fork() (se duplique, quoi), le processus fils demande un excve au kernel: on doit executer tcsh avec monscript comme argument. tcsh demarre et commence a lire monscript. La premiere ligne est *ignoree* (# designe un commentaire dans tous les shells). Comme il y aura des commandes bash que tcsh ne comprendra pas, cela resultera certainement en un erreur a l'execution.
wala wala.
fred
Jean-Louis Matton wrote:
>
> Pablo Saratxaga a écrit :
> >
> > Kaixo!
> >
> > On Tue, Jun 19, 2001 at 04:04:54PM +0200, Eugène Sandford wrote:
> >
> > >> Mon avis:
> > >> Ce n'est pas le shell qui interprète le #! mais le système lorsque
> > >> l'on execute directement un executable
> >
> > Exact. (regarder les sources du noyau pour les détails).
> >
> > > Quand tu rends ton script exécutable, il va prendre par contre
> > > le "#!/bin/bash" de la première ligne comme l'interpréteur de ton script.
> >
> > Oui, mais qui c'est qui lis cette première ligne et en conclus qu'il faut
> > lancer /bin/bash? C'est le noyau.
> c'est le shell en court.
> Si on lance le script en argument d'un shell on force le à utiliser ce
> shell,
> la première ligne n'est pas interprétée.
>
> >
> > --
> > Ki ça vos våye bén,
> > Pablo Saratxaga
> >
> > http://www.srtxg.easynet.be/ PGP Key available, key ID: 0x8F0E4975
> >
> > [ Soyez précis dans vos sujets svp afin de déterminer directement ]
> > [ le type de demande... ]
> > [ Pour vous (dés)inscrire, aller sur http://linuxbe.org/ml.php ]
> > [ http://LinuxBe.org Contact: listmaster@linuxbe.org ]
>
> --
> Jean-Louis Matton Cliniques universitaire St LUC
> tel +32.2.764.37.13 av. Hippocrate 10/ SIH
> fax +32.2.764.89.22 B-1200 Bruxelles
> mailto:Jean-Louis.Matton@clin.ucl.ac.be BELGIUM
> ---------------------------------------------------------------------
> Thinking ahead U U N N III X X
> U U NN N I X X
> U U N N N I X
> U U N NN I X X
> UUU N N III X X LIVE FREE OR DIE
> ---------------------------------------------------------------------
>
> [ Soyez précis dans vos sujets svp afin de déterminer directement ]
> [ le type de demande... ]
> [ Pour vous (dés)inscrire, aller sur http://linuxbe.org/ml.php ]
> [ http://LinuxBe.org Contact: listmaster@linuxbe.org ]
--
------------------------- * oOo * -------------------------
Frederic Detienne
Cisco Systems Escalation Engineer
Security & Network Services
Tel 32 2 704 55 55
[ Soyez précis dans vos sujets svp afin de déterminer directement ]
[ le type de demande... ]
[ Pour vous (dés)inscrire, aller sur http://linuxbe.org/ml.php ]
[ http://LinuxBe.org Contact: listmaster@linuxbe.org ]