je rencontre un "permission denied" que je ne comprends pas sur un
script groovy basic :
~/work/groovy/essais> ls -al
[...]
-rwxr-xr-x 1 yvon yvon 138 5 Dec 09:34 helloWorld.groovy
la première ligne de mon script :
#!/Users/yvon/CVS/groovy/groovy-core/target/install/bin groovy
et j'ai bien les mêmes perms dans :
/Users/yvon/CVS/groovy/groovy-core/target/install/bin
~/CVS/groovy/groovy-core/target/install> ls -al bin
[...]
-rwxr-xr-x 1 yvon yvon 5028 5 Dec 09:01 groovy
[...]
--
yt
Non, ca ne peut pas dependre du shell. Le shell applle le noyau et lui demande de lancer l'executable correspondant au script. C'est le noyau qui se rend compte qu'il s'agit d'un fichier commencant par #!. Il interprete la suite de la ligne comme un executable qu'il execute et a qui il passe le fichier du script sur l'entree standard:
Pour moi, j'avais toujours pensé que c'était le shell qui faisait ce test du #! en début de fichier, et je ne vois d'ailleurs pas en quoi ce que tu donnes en exemple (ici la terre) prouve quoique ce soit.
Il prouve que le fichier est envoye sur l'entree standard du programme. En plus je le trouve rigolo, c'est un programme qui s'affiche lui-meme. C'est plus difficile a faire en C. (du moment que l'endroit ou se trouve le fichier dans l'arborescence est inconnu, sinon c'est trop facile).
J'ai donc fait un essai de lancer un script **dans un programme c** par un fork suivi d'un exec dans lequel je n'ai mis que le chemin du script, et effectivement cela a marché.
Tu peux aussi faire un ktrace ./script et remarquer que le nouveau processus cree lance le programme qui se trouve apres #!, ce qui prouve que ce n'est pas le shell qui va chercher le nom de l'executable apres #!.
Cependant je serais curieux de lire une doc indiquant en clair que c'est cela. As-tu une référence ?
Dans les sources du noyau linux il etait possible de changer le comportement du noyau vis-a-vis de certains scripts. J'en ai deduis que c'etait le noyau qui lancait les scripts. Mais ca doit se trouver dans tout livre sur Unix.
-- Saïd. C programmers never die - they're just cast into void.
JPaul :
Saïd <said@brian.lan> wrote:
Non, ca ne peut pas dependre du shell. Le shell applle le noyau et lui
demande de lancer l'executable correspondant au script. C'est le noyau qui
se rend compte qu'il s'agit d'un fichier commencant par #!. Il interprete la
suite de la ligne comme un executable qu'il execute et a qui il passe le
fichier du script sur l'entree standard:
Pour moi, j'avais toujours pensé que c'était le shell qui faisait ce
test du #! en début de fichier, et je ne vois d'ailleurs pas en quoi ce
que tu donnes en exemple (ici la terre) prouve quoique ce soit.
Il prouve que le fichier est envoye sur l'entree standard du programme. En
plus je le trouve rigolo, c'est un programme qui s'affiche lui-meme. C'est
plus difficile a faire en C. (du moment que l'endroit ou se trouve le
fichier dans l'arborescence est inconnu, sinon c'est trop facile).
J'ai donc fait un essai de lancer un script **dans un programme c** par
un fork suivi d'un exec dans lequel je n'ai mis que le chemin du script,
et effectivement cela a marché.
Tu peux aussi faire un ktrace ./script et remarquer que le nouveau
processus cree lance le programme qui se trouve apres #!, ce qui prouve que
ce n'est pas le shell qui va chercher le nom de l'executable apres #!.
Cependant je serais curieux de lire une doc indiquant en clair que c'est
cela. As-tu une référence ?
Dans les sources du noyau linux il etait possible de changer le
comportement du noyau vis-a-vis de certains scripts. J'en ai deduis que
c'etait le noyau qui lancait les scripts. Mais ca doit se trouver dans tout
livre sur Unix.
--
Saïd.
C programmers never die - they're just cast into void.
Non, ca ne peut pas dependre du shell. Le shell applle le noyau et lui demande de lancer l'executable correspondant au script. C'est le noyau qui se rend compte qu'il s'agit d'un fichier commencant par #!. Il interprete la suite de la ligne comme un executable qu'il execute et a qui il passe le fichier du script sur l'entree standard:
Pour moi, j'avais toujours pensé que c'était le shell qui faisait ce test du #! en début de fichier, et je ne vois d'ailleurs pas en quoi ce que tu donnes en exemple (ici la terre) prouve quoique ce soit.
Il prouve que le fichier est envoye sur l'entree standard du programme. En plus je le trouve rigolo, c'est un programme qui s'affiche lui-meme. C'est plus difficile a faire en C. (du moment que l'endroit ou se trouve le fichier dans l'arborescence est inconnu, sinon c'est trop facile).
J'ai donc fait un essai de lancer un script **dans un programme c** par un fork suivi d'un exec dans lequel je n'ai mis que le chemin du script, et effectivement cela a marché.
Tu peux aussi faire un ktrace ./script et remarquer que le nouveau processus cree lance le programme qui se trouve apres #!, ce qui prouve que ce n'est pas le shell qui va chercher le nom de l'executable apres #!.
Cependant je serais curieux de lire une doc indiquant en clair que c'est cela. As-tu une référence ?
Dans les sources du noyau linux il etait possible de changer le comportement du noyau vis-a-vis de certains scripts. J'en ai deduis que c'etait le noyau qui lancait les scripts. Mais ca doit se trouver dans tout livre sur Unix.
-- Saïd. C programmers never die - they're just cast into void.
Grrrr
On Mon, 13 Dec 2004 10:44:31 +0000, Saïd wrote:
JPaul :
Saïd wrote:
Non, ca ne peut pas dependre du shell. Le shell applle le noyau et lui demande de lancer l'executable correspondant au script. C'est le noyau qui se rend compte qu'il s'agit d'un fichier commencant par #!. Il interprete la suite de la ligne comme un executable qu'il execute et a qui il passe le fichier du script sur l'entree standard:
Pour moi, j'avais toujours pensé que c'était le shell qui faisait ce test du #! en début de fichier, et je ne vois d'ailleurs pas en quoi ce que tu donnes en exemple (ici la terre) prouve quoique ce soit.
C'est forcément le noyau qui fait le test: si, en C, tu fait exec("./mon_script.sh"); pour que ça marche, il faut forcément que ce soit le noyau qui gère la syntaxe #!<xxx> au début du fichier. Or, ça marche ;-)
[...]
Dans les sources du noyau linux il etait possible de changer le comportement du noyau vis-a-vis de certains scripts.
Pas tout à fait. On peut changer le comportement du noyau vis-à-vis des binaires, pas des scripts. Par exemple, on peut dire au noyau que les programmes au format Windows sont à lancer avec Wine, ou que les binaires java sont à lancer avec la machine virtuelle ou qu'un binaire PC doit être lancé avec qemu, quand on n'est pas sur PC... Pour celà, on lui indique comment reconnaitre un format binaire particulier et quel programme utiliser pour le lancer. Ca ne marche que pour les executables dont le noyau ne connait à priori pas le format. Comme le noyau sait déjà gérer les scripts, ce système ne sera jamais utilisé pour lancer ceux-ci.
[...]
On Mon, 13 Dec 2004 10:44:31 +0000, Saïd wrote:
JPaul :
Saïd <said@brian.lan> wrote:
Non, ca ne peut pas dependre du shell. Le shell applle le noyau et lui
demande de lancer l'executable correspondant au script. C'est le noyau qui
se rend compte qu'il s'agit d'un fichier commencant par #!. Il interprete la
suite de la ligne comme un executable qu'il execute et a qui il passe le
fichier du script sur l'entree standard:
Pour moi, j'avais toujours pensé que c'était le shell qui faisait ce
test du #! en début de fichier, et je ne vois d'ailleurs pas en quoi ce
que tu donnes en exemple (ici la terre) prouve quoique ce soit.
C'est forcément le noyau qui fait le test:
si, en C, tu fait
exec("./mon_script.sh");
pour que ça marche, il faut forcément que ce soit le noyau qui gère la
syntaxe #!<xxx> au début du fichier. Or, ça marche ;-)
[...]
Dans les sources du noyau linux il etait possible de changer le
comportement du noyau vis-a-vis de certains scripts.
Pas tout à fait. On peut changer le comportement du noyau vis-à-vis
des binaires, pas des scripts. Par exemple, on peut dire au noyau que
les programmes au format Windows sont à lancer avec Wine, ou que les
binaires java sont à lancer avec la machine virtuelle ou qu'un binaire PC
doit être lancé avec qemu, quand on n'est pas sur PC... Pour celà, on
lui indique comment reconnaitre un format binaire particulier et quel
programme utiliser pour le lancer.
Ca ne marche que pour les executables dont le noyau ne connait à priori
pas le format. Comme le noyau sait déjà gérer les scripts, ce système
ne sera jamais utilisé pour lancer ceux-ci.
Non, ca ne peut pas dependre du shell. Le shell applle le noyau et lui demande de lancer l'executable correspondant au script. C'est le noyau qui se rend compte qu'il s'agit d'un fichier commencant par #!. Il interprete la suite de la ligne comme un executable qu'il execute et a qui il passe le fichier du script sur l'entree standard:
Pour moi, j'avais toujours pensé que c'était le shell qui faisait ce test du #! en début de fichier, et je ne vois d'ailleurs pas en quoi ce que tu donnes en exemple (ici la terre) prouve quoique ce soit.
C'est forcément le noyau qui fait le test: si, en C, tu fait exec("./mon_script.sh"); pour que ça marche, il faut forcément que ce soit le noyau qui gère la syntaxe #!<xxx> au début du fichier. Or, ça marche ;-)
[...]
Dans les sources du noyau linux il etait possible de changer le comportement du noyau vis-a-vis de certains scripts.
Pas tout à fait. On peut changer le comportement du noyau vis-à-vis des binaires, pas des scripts. Par exemple, on peut dire au noyau que les programmes au format Windows sont à lancer avec Wine, ou que les binaires java sont à lancer avec la machine virtuelle ou qu'un binaire PC doit être lancé avec qemu, quand on n'est pas sur PC... Pour celà, on lui indique comment reconnaitre un format binaire particulier et quel programme utiliser pour le lancer. Ca ne marche que pour les executables dont le noyau ne connait à priori pas le format. Comme le noyau sait déjà gérer les scripts, ce système ne sera jamais utilisé pour lancer ceux-ci.
[...]
blanc
Grrrr wrote:
C'est forcément le noyau qui fait le test: si, en C, tu fait exec("./mon_script.sh"); pour que ça marche, il faut forcément que ce soit le noyau qui gère la syntaxe #!<xxx> au début du fichier. Or, ça marche ;-)
Oui. Une fois que j'ai eu fais ça, j'ai été convaincu. Mais avant de le faire, ça ne me paraissait pas quelque chse d'obligé.
JPaul. -- /==/==- Jean-Paul BLANC / /--/--// quelque-part (somewhere) |/| L | en (in) /|| = ||| FRANCE
Grrrr <Grrr@Grrr.org.invalid> wrote:
C'est forcément le noyau qui fait le test:
si, en C, tu fait
exec("./mon_script.sh");
pour que ça marche, il faut forcément que ce soit le noyau qui gère la
syntaxe #!<xxx> au début du fichier. Or, ça marche ;-)
Oui. Une fois que j'ai eu fais ça, j'ai été convaincu. Mais avant de le
faire, ça ne me paraissait pas quelque chse d'obligé.
JPaul.
--
/==/==\- Jean-Paul BLANC
/ /--/--//\ quelque-part (somewhere)
|/| L |\ en (in)
/|| = |||\ FRANCE
C'est forcément le noyau qui fait le test: si, en C, tu fait exec("./mon_script.sh"); pour que ça marche, il faut forcément que ce soit le noyau qui gère la syntaxe #!<xxx> au début du fichier. Or, ça marche ;-)
Oui. Une fois que j'ai eu fais ça, j'ai été convaincu. Mais avant de le faire, ça ne me paraissait pas quelque chse d'obligé.
JPaul. -- /==/==- Jean-Paul BLANC / /--/--// quelque-part (somewhere) |/| L | en (in) /|| = ||| FRANCE
blanc
Saïd wrote:
Il prouve que le fichier est envoye sur l'entree standard du programme. En plus je le trouve rigolo, c'est un programme qui s'affiche lui-meme.
Oui, mais il ne prouve pas que ce soit le noyau plutôt que le shell qui fait le test du #!. Voilà ce que je voulais dire. Et ceci étant, c'est vrai que c'est joli !...
Tu peux aussi faire un ktrace ./script et remarquer que le nouveau processus cree lance le programme qui se trouve apres #!, ce qui prouve que ce n'est pas le shell qui va chercher le nom de l'executable apres #!.
OK d'accord, j'aurais pu y penser aussi.
Dans les sources du noyau linux il etait possible de changer le comportement du noyau vis-a-vis de certains scripts. J'en ai deduis que c'etait le noyau qui lancait les scripts. Mais ca doit se trouver dans tout livre sur Unix.
D'accord. Merci.
JPaul.
-- /==/==- Jean-Paul BLANC / /--/--// quelque-part (somewhere) |/| L | en (in) /|| = ||| FRANCE
Saïd <said@brian.lan> wrote:
Il prouve que le fichier est envoye sur l'entree standard du programme. En
plus je le trouve rigolo, c'est un programme qui s'affiche lui-meme.
Oui, mais il ne prouve pas que ce soit le noyau plutôt que le shell qui
fait le test du #!. Voilà ce que je voulais dire.
Et ceci étant, c'est vrai que c'est joli !...
Tu peux aussi faire un ktrace ./script et remarquer que le nouveau
processus cree lance le programme qui se trouve apres #!, ce qui prouve que
ce n'est pas le shell qui va chercher le nom de l'executable apres #!.
OK d'accord, j'aurais pu y penser aussi.
Dans les sources du noyau linux il etait possible de changer le
comportement du noyau vis-a-vis de certains scripts. J'en ai deduis que
c'etait le noyau qui lancait les scripts. Mais ca doit se trouver dans tout
livre sur Unix.
D'accord. Merci.
JPaul.
--
/==/==\- Jean-Paul BLANC
/ /--/--//\ quelque-part (somewhere)
|/| L |\ en (in)
/|| = |||\ FRANCE
Il prouve que le fichier est envoye sur l'entree standard du programme. En plus je le trouve rigolo, c'est un programme qui s'affiche lui-meme.
Oui, mais il ne prouve pas que ce soit le noyau plutôt que le shell qui fait le test du #!. Voilà ce que je voulais dire. Et ceci étant, c'est vrai que c'est joli !...
Tu peux aussi faire un ktrace ./script et remarquer que le nouveau processus cree lance le programme qui se trouve apres #!, ce qui prouve que ce n'est pas le shell qui va chercher le nom de l'executable apres #!.
OK d'accord, j'aurais pu y penser aussi.
Dans les sources du noyau linux il etait possible de changer le comportement du noyau vis-a-vis de certains scripts. J'en ai deduis que c'etait le noyau qui lancait les scripts. Mais ca doit se trouver dans tout livre sur Unix.
D'accord. Merci.
JPaul.
-- /==/==- Jean-Paul BLANC / /--/--// quelque-part (somewhere) |/| L | en (in) /|| = ||| FRANCE
Eric Lévénez
Le 13/12/04 21:33, dans <1gor4yq.1eq5leru08e68N%, « JPaul » a écrit :
Saïd wrote:
Il prouve que le fichier est envoye sur l'entree standard du programme. En plus je le trouve rigolo, c'est un programme qui s'affiche lui-meme.
Oui, mais il ne prouve pas que ce soit le noyau plutôt que le shell qui fait le test du #!. Voilà ce que je voulais dire. Et ceci étant, c'est vrai que c'est joli !...
Pour info, le noyau fait en gros 3 tests pour lancer un exécutable. Il vérifie dans les points suivants :
- Vérification du sharp-bang (puis blancs ou tabs, un nom d'exécutable et des paramètres éventuels et terminé par un NL).
- Vérification Executable Mach-O Fat-Binary (recherche de l'architecture la mieux adaptée au CPU de la machine).
- Vérification Executable Mach-O Flat.
-- Éric Lévénez -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.
Le 13/12/04 21:33, dans <1gor4yq.1eq5leru08e68N%blanc@empty.org>, « JPaul »
<blanc@empty.org> a écrit :
Saïd <said@brian.lan> wrote:
Il prouve que le fichier est envoye sur l'entree standard du programme. En
plus je le trouve rigolo, c'est un programme qui s'affiche lui-meme.
Oui, mais il ne prouve pas que ce soit le noyau plutôt que le shell qui
fait le test du #!. Voilà ce que je voulais dire.
Et ceci étant, c'est vrai que c'est joli !...
Pour info, le noyau fait en gros 3 tests pour lancer un exécutable. Il
vérifie dans les points suivants :
- Vérification du sharp-bang (puis blancs ou tabs, un nom d'exécutable et
des paramètres éventuels et terminé par un NL).
- Vérification Executable Mach-O Fat-Binary (recherche de l'architecture la
mieux adaptée au CPU de la machine).
- Vérification Executable Mach-O Flat.
--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.
Le 13/12/04 21:33, dans <1gor4yq.1eq5leru08e68N%, « JPaul » a écrit :
Saïd wrote:
Il prouve que le fichier est envoye sur l'entree standard du programme. En plus je le trouve rigolo, c'est un programme qui s'affiche lui-meme.
Oui, mais il ne prouve pas que ce soit le noyau plutôt que le shell qui fait le test du #!. Voilà ce que je voulais dire. Et ceci étant, c'est vrai que c'est joli !...
Pour info, le noyau fait en gros 3 tests pour lancer un exécutable. Il vérifie dans les points suivants :
- Vérification du sharp-bang (puis blancs ou tabs, un nom d'exécutable et des paramètres éventuels et terminé par un NL).
- Vérification Executable Mach-O Fat-Binary (recherche de l'architecture la mieux adaptée au CPU de la machine).
- Vérification Executable Mach-O Flat.
-- Éric Lévénez -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.
blanc
Eric Lévénez wrote:
Vérification du sharp-bang
Ach! Joli ! J'ai mis un certain temps avant de traduire... ;-)
Merci Eric pour ces renseignements.
JPaul. -- /==/==- Jean-Paul BLANC / /--/--// quelque-part (somewhere) |/| L | en (in) /|| = ||| FRANCE
Eric Lévénez <news@levenez.com.invalid> wrote:
Vérification du sharp-bang
Ach! Joli ! J'ai mis un certain temps avant de traduire...
;-)
Merci Eric pour ces renseignements.
JPaul.
--
/==/==\- Jean-Paul BLANC
/ /--/--//\ quelque-part (somewhere)
|/| L |\ en (in)
/|| = |||\ FRANCE