2010-04-08 5 views
1

Mon problème est comme ça (OS est Sun Solaris):Quelles variables d'environnement sont disponibles lors du démarrage du script à l'aide du processus de démarrage init.d?

  1. Au moment du démarrage, je veux lancer un processus à l'aide d'un script spécifique. Je le fais en mettant ce script dans /etc/init.d (et en suivant d'autres règles K et S).

  2. Le programme qui sera appelé par le script est situé au $HOME/xxx/yyy. J'utilise 'su - {myuser} -c "{full path of the program}"' pour exécuter le script en tant que {myuser}.

  3. Je ne veux pas hardcode la valeur de $ HOME dans le script, mais je veux utiliser uniquement la variable d'environnement $HOME. Comment puis-je obtenir cette variable d'environnement $HOME dans le script shell? Aussi quelles autres variables seront disponibles pour moi?

+0

Une erreur typique de serveur. Doit être déplacé, il peut y avoir plus de réponses qualifiées. – Mnementh

+0

Vous vous rendez compte que c'est un risque pour la sécurité, n'est-ce pas? De toute façon, 'su -' devrait vous donner' $ HOME'. Si vous essayez 'su - user -c" echo \ $ HOME "' cela vous donne-t-il le bon résultat? Est-ce que votre script init.d ne fonctionne pas? Que fait-il/ne fait-il pas? Avez-vous essayé de rediriger la sortie vers un fichier pour le débogage? –

Répondre

2

Pour obtenir la variable d'accueil de tout utilisateur, essayez ce hack:

HOME=`sudo -u myuser -s "cd ~; pwd"` 
+1

vous pouvez également essayer HOME = 'getent passwd myuser | couper -d: -f6' –

2

Il suffit de mettre

env > env.txt 

dans le script. Après l'exécution de votre script, le fichier env.txt contient toutes les variables d'environnement.

1

2) $ HOME de l'utilisateur qui? root $ HOME ou myuser $ HOME

Si c'est chez myuser, utilisez simplement $ HOME dans le script enfant, et ne l'utilisez pas dans le script init.d. Cela sera défini pour vous par le processus shell que vous démarrez. Quand vous faites su - {myuser}, vous demandez à su d'exécuter le shell de connexion de myuser (tel que défini dans/etc/passwd). Le shell de connexion définira les variables d'environnement par défaut en fonction du shell. Voir la documentation de votre shell pour plus de détails. Sur Solaris, c'est probablement ksh ou bourne shell.

3) Faire su - myuser -c /usr/bin/env. Cela affichera les variables d'environnement qui seront définies dans le script enfant.

Questions connexes