bonjour,
je suis en train d'étudier "développement système sous linux" de Christophe Blaess.
Je tombe sur un os, et pas des moindres.
je cherche à transmettre l'environnement de mon shell par la variable extern char **environ;
mais rien n'y fait. Ma variable $SHLVL n'est pas incrémentée lors de l'appel au programme du livre.
voici le contenu de mon programme:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
extern char **environ;
int main(int argc, char ** argv)
{
char* args[] = {"sh", "-c", "echo $SHLVL", (char*) NULL};
execve("/bin/sh", args, environ);
return EXIT_SUCCESS;
}
et à son exécution:
gunsailor@soulfly:~$ echo $SHLVL
1
gunsailor@soulfly:~$ ./test
1
gunsailor@soulfly:~$
si quelqu'un a une idée je suis preneur !!!!!!!!!
# Processus et processus fils
Posté par Benoît Sibaud (site web personnel) . Évalué à 4.
Nb: éviter d'utiliser test.c et test comme nom de programme, pour ne pas se retrouver à lancer /bin/test involontairement…
Du coup je garde mon a.out comme nom d'exécutable.
En remplaçant sh par bash deux fois :
Et tant qu'on y est avec
char* args[] = {"sh", "-c", "echo $SHLVL $a", (char*) NULL};
[^] # Re: Processus et processus fils
Posté par gunsailor . Évalué à 1.
ce commentaire est inutile.
j'ai quand même essayé de renommer mon exécutable, rien n'y fait.
la variable $SHLVL devrait être incrémentée au fur et à mesure des appels.
que se passe-t-il?
[^] # Re: Processus et processus fils
Posté par _kaos_ . Évalué à 3.
Bonjour,
Oui, au fur et à mesure des appels à bash (c'est une variable interne à bash, elle ne fonctionne pas avec sh).
En remplaçant /bin/sh par /bin/bash le résultat devrait être le bon, comme l'a indiqué Benoît dans le commentaire précédent.
Matricule 23415
# mais il reste un problème
Posté par gunsailor . Évalué à 1.
voici la sortie du programme répertorié dans le livre de christophe blaess:
avec pour fichier c:
et ceci seulement après avoir changé les "sh" en "bash".
l'appel à un autre shell par "sh", ne modifie pas le nombre contenu dans la variable $SHLVL.
je n'avait pas bien compris l'allusion de Benoît. désolé.
mais cela ne fonctionne toujours pas!
avez-vous des retours sur ce bouquin ?
merci d'avance
[^] # Re: mais il reste un problème
Posté par Benoît Sibaud (site web personnel) . Évalué à 4.
Les mêmes causes produisent les mêmes effets :
Quels shells se préoccupent de la variable SHLVL (visiblement bash et zsh au moins) ?
Et les pages de manuel :
# résolu
Posté par gunsailor . Évalué à 1.
merci d'avoir pris le temps d'examiner cela avec moi et de décortiquer pour moi ces commandes.
Je vais me méfier de tout ce qu'il y a marqué dans ce bouquin désormais.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.