Compréhension des exigences pour les variables d'environnement d'exécution et de réglage
Nous avons beaucoup de difficultés dans l'interprétation de notre professeur. Nous avons demandé des précisions et le suivant de lui
- Pour execve, envoyer un environnement de configuration avec votre exporté variables et de créer une interface de commande pour lancer un shell interne est exécuté de /bin/bash, de cette façon, vous pouvez voir votre exporté des variables à l'aide env.
(Il parle de la création de notre propre environnement vars ici.)
- Oui créer votre propre. Vous pouvez commencer par la copie environ lorsque votre shell démarre et ajouter que les variables exportées
C'est pour le prochain post sur un Débordement de Pile par moi (la lecture de ce post vous aidera à comprendre ce que je suis en train de faire):
à l'aide d'un nouveau chemin avec execve pour exécuter commande ls
Nous sommes juste très confus au sujet de ce. Une fois de plus, je vais vous expliquer ce que nous essayons de faire maintenant. Similaire à la façon dont votre shell de Linux, pour cela, nous devons écrire notre propre programme qui permet de définir des variables d'environnement comme CHEMIN d'accès, d'utilisation et de toutes les autres vars l'utilisateur souhaite définir.
Un exemple de comment vous appelez ce serait (à l'intérieur de votre programme lors de sa commande):
mysetenv dog spike
qui permettrait de créer une variable d'environnement à la recherche comme un "chien=spike"
Plus important encore, nous devons être en mesure de définir notre propre variable de CHEMIN d'accès et l'envoyer à un exec
de commande. C'est la confusion de la partie, car, sur l'ensemble de nos questions, nous ne comprenons pas ce que nous sommes censés faire.
source d'informationauteur james
Vous devez vous connecter pour publier un commentaire.
Il est en fait très simple. Vous savez déjà que vos arguments sont d'une liste de
char *
terminé par un pointeur NULL. De même, l'environnement est tout simplement une liste dechar *
terminé par un pointeur NULL. Classiquement, les valeurs de la liste, prendre la formeVARNAME=var-value
si vous pouvez passer d'autres formats si vous le souhaitez.Ainsi, pour prendre un cas simple:
Dans cet exemple, le programme sera exécuté
/bin/sh
avec des arguments-c
etenv
ce qui signifie que l'environnement de ligne de commande exécuter lesenv
programme trouvé sur son CHEMIN. L'environnement ici est défini pour contenir les 5 valeurs de l'eglise orthodoxe format. Si vous modifiezenv
àdate
(ouenv; date
), vous verrez l'effet de la TZ, par exemple. Quand je le lance sur mon MacOS X de la machine, la sortie est:La coquille a ajouté des variables d'environnement
SHLVL
_
etPWD
à celles que j'explicitement définie dans laexecve()
appel.Vous pouvez aussi faire des choses plus, comme la copie de l'autre les variables d'environnement de votre véritable environnement où ils ne sont pas en conflit avec celles que vous souhaitez définir explicitement. Vous pouvez également jouer à des jeux comme avoir deux valeurs à une seule variable dans l'environnement - que l'on prend effet? Et vous pouvez jouer à des jeux avec des noms de variables qui contiennent des espaces (le shell n'aime pas tant que ça), ou des entrées qui ne correspondent pas à la " nom_variable=valeur de la notation à tous (pas de signe égal).
Le code de Jonathan Leffler fonctionne très bien, sauf si vous souhaitez modifier le
PWD
(répertoire de travail) de la variable.Ce que j'ai fait, afin de changer le répertoire de travail, était de mettre un
chdir(..)
avantexecve(..)
et appel:Je suis un peu en retard à la fête ici, mais si vous voulez conserver les anciennes variables d'environnement ainsi que la création de votre propre, l'utilisation
setenv
puis passerenviron
àexecve()
.environ
est une variable déclarée dansunistd.h
et il garde une trace des variables d'environnement au cours de ce processus en cours d'exécution.setenv()
etputenv()
modifierenviron
de sorte que lorsque vous passezexecve()
les variables d'environnement sera juste comme vous le souhaitez.