Qui shell, Perl appel system() utiliser?
Je suis à l'aide d'un système d'appel pour certaines tâches
system('myframework mycode');
mais il se plaint de manquer de variables d'environnement.
Ces variables d'environnement sont définies à mon shell bash (d'où je lance le code Perl).
Ce que je fais mal?
Ne le system
appel de créer une nouvelle marque shell (sans paramètres des variables d'environnement)? Comment puis-je l'éviter?
OriginalL'auteur Lazer | 2010-11-19
Vous devez vous connecter pour publier un commentaire.
C'est compliqué. Perl n'est pas nécessairement invoquer un shell. Perldoc dit:
De sorte qu'il ressemble vraiment à vous aurait les arguments passés droit de execvp. En outre, si le shell chargé votre .bashrc, .de profil, ou .bash_profile dépend si le shell est interactif. Probable, il n'est pas, mais vous pouvez vérifier comme cette.
OriginalL'auteur mkb
Si vous ne voulez pas invoquer un shell, appel
system
avec une liste:Si vous le souhaitez shell, l'appeler explicitement:
OriginalL'auteur glenn jackman
Je pense que ce n'est pas la question de la coquille de choix, puisque les variables d'environnement sont toujours héritées par les sous-processus, à moins nettoyé de manière explicite.
Êtes-vous sûr que vous avez exporté vos variables?
Cela va fonctionner:
Ce sera trop de travail:
Ce ne serait pas:
OriginalL'auteur berekuk
système() appels /bin/sh comme une coquille. Si vous êtes sur un peu différentes de la boite comme le BRAS, il serait bon de lire la page de man pour l'exec de la famille des appels -- comportement par défaut. Vous pouvez appeler votre .profil si vous en avez besoin, depuis que le système() prend une commande
OriginalL'auteur jim mcnamara
J'ai lutté pour 2 jours de travail sur ce. Dans mon cas, les variables d'environnement ont été correctement définie sous linux mais pas cygwin.
De mkb de l' réponse j'ai pensé à consulter
man perlrun
et il mentionne une variable appeléePERL5SHELL
. Le texte suivant puis a résolu le problème:Comme c'est souvent le cas - tout ce que je peux dire, c'est "ça marche pour moi", bien que la documentation ne dire que ce pourrait être une solution rationnelle:
Si le shell utilisé par perl n'héritent implicitement les variables d'environnement, puis ils ne seront pas définies pour vous.
OriginalL'auteur Richard Corden
J'ai foiré avec les variables d'environnement de mon script sur ce post où j'avais besoin de l'env variable $DBUS_SESSION_BUS_ADDRESS à définir, mais il ne serait pas quand j'ai appelé le script en tant que root. Vous pouvez lire à travers, mais en fin de compte, vous pouvez vérifier si %ENV contient vos variables nécessaires à et si ne pas les ajouter.
De perlvar
Mon problème est que j'ai été l'exécution du script avec sudo et que ne pas conserver tous mes de l'utilisateur des variables d'environnement, vous exécutez le script avec sudo ou comme un autre utilisateur, disons www-data (apache)?
Test Simple:
et si cela ne fonctionne pas, alors vous aurez besoin de l'ajouter à %ENV en haut de votre script.
OriginalL'auteur Joel Berger
essayer
system("echo \$SHELL");
sur votre système.system
appel ne respecte PAS $SHELL en aucune manière, la forme ou la forme. Voir Matt Kane répondreOriginalL'auteur sud03r