environnement et bash

tabliertablier Membre
en AppleScript je fais:
set leTexte to do shell script "export AEDebugSends=1; export AEDebugReceives=1 ; /Users/msaro/monAppli.app ; unset AEDebugSends ; unset AEDebugReceives"
ça marche parfaitement. J'essaie maintenant de me passer d'AppelScript. J'ai lancé le terminal et j'ai succéssivement entré les trois commandes:
export AEDebugSends=1; export AEDebugReceives=1
/Users/msaro/monAppli.app
unset AEDebugSends ; unset AEDebugReceives

ça marche parfaitement également j'obtiens les résultats escomptés.

je souhaite faire cela par programmation maintenant.
Mon idée est de créer les deux variables d'environnement, puis d'utiliser un NSTask/NSPipe pour faire exécuter le programme et enfin de supprimer les deux variables d'environnement.
j'ai voulu mettre les variables d'environnement en faisant un ~/.bash_login avec:
export AEDebugSends=1; export AEDebugReceives=1
puis j'ai fait un ~/.bash_logout avec:
unset AEDebugSends ; unset AEDebugReceives

je lance le terminal. j'ai l'erreur: -bash: export: command not found et seul la variable AEDebugReceives=1 est mise en place!
Je ne comprends pas pourquoi seule la deuxième variable est créée!
Si je mets le ~/.bash_login sur deux lignes:
export AEDebugSends=1
export AEDebugReceives=1

alors plus aucune variable n'est créée!
  :-\\ Comment fait-on pour créer par programmation des variables d'environnement pour bash? ou doit-on les mettre?

Réponses

  • zoczoc Membre
    juin 2009 modifié #2
    Juste une petite remarque... Les unset ne servent à  rien, car le rôle de export, c'est d'exporter des variables pour les processus fils du shell, donc en gros uniquement monAppli.app et les processus qui pourraient être lancés par monAppli.app...

    Maintenant, quand on utilise NSTask, il est possible de passer des variables d'environnement perso en utilisant 

    - (void)setEnvironment:(NSDictionary *)environmentDictionary
    


    Evidemment cela a pour conséquence d'écraser les autres variables d'environnement. Il suffit donc de récupérer l'environnement courant, de lui rajouter les variables que l'on veut, puis de lancer la tâche. Pour récupérer l'environnement courant et y rajouter de nouvelles variables:

    <br />NSMutableDictionnary *shellEnv = [[[[NSProcessInfo processInfo] environment ] mutableCopy] autorelease];<br /><br />[shellEnv setObject: @&quot;1&quot; forKey: @&quot;AEDebugSends&quot;];<br />[shellEnv setObject: @&quot;1&quot; forKey: @&quot;AEDebugReceives&quot;];<br />....<br />[myTask setEnvironment:shellEnv];<br />...<br />[myTask launch];<br />
    



  • tabliertablier Membre
    juin 2009 modifié #3
    first: Merci pour cette réponse.

    Je vais enlever les 'unset' pour voir. Quand je travaille dans le terminal (sans en ressortir), ils sont nécessaires car "export AEDebugSends=0; export AEDebugReceives=0" ne dévalident pas le "Apple Event logging", contrairement à  ce qui est dit dans la doc Apple.

      :( J'ai essayé de modifier les variables d'environnement de la manière que tu décris. Je me suis planté quelque part car celà  n'a pas marché (manque d'expérience!).

    La solution que j'ai retenue c'est de faire un NSTask avec:
    adresse:  "bin/bash"
    arg1: "-c"
    arg2: "export AEDebugSends=1 ; export AEDebugReceives=1 ; '/Users/msaro/monAppli.app' ; unset AEDebugSends ; unset AEDebugReceives"

      :P Ce qui résoud mon problème! même si j'ai l'impression d'exécuter bash dans bash !!
Connectez-vous ou Inscrivez-vous pour répondre.