web-dev-qa-db-fra.com

Différence entre le lancement d'une application à partir d'un raccourci clavier et le terminal?

Ce que j'ai observé:

Lorsque je tape emacs dans gnome-terminal, il se lance dans le même environnement, avec des variables définies dans .bashrc. Si j'utilise un raccourci clavier vers la commande emacs, il s'ouvre dans un environnement qui n'a pas ces variables.

Questions:

  1. Y a-t-il une raison à ce comportement?
  2. Comment puis-je faire ouvrir emacs dans un environnement avec des paramètres de .bashrc?
  3. Si j'ai un accès root, puis-je définir ces variables à l'échelle du système?

Contexte supplémentaire: J'ai besoin de pouvoir accéder aux variables depuis R, comme décrit dans un SO question ( Comment accéder à une variable d'environnement bash depuis R dans emacs ), et j'ai également besoin du chemin vers ma distribution texlive pour Auctex. La présente question est différente en ce que je suis plus généralement intéressé par le différence entre le lancement d'emacs depuis le terminal et le lancement d'emacs depuis le menu Applications, Gnome-do ou un raccourci clavier qui appelle soit emacs ou /usr/bin/emacs23 %F.

5
Abe

~/.bashrc Est généralement lu pour les shells interactifs secondaires après votre connexion. Si vous souhaitez initialiser vos paramètres lors de la connexion, utilisez plutôt ~/.profile. Pour appliquer vos paramètres à l'échelle du système, utilisez /etc/profile. C'est le premier fichier lu par bash.

Pour clarifier les choses, je pense que j'expliquerais un peu plus.

  • Lorsque vous vous connectez, votre shell de connexion lit d'abord le /etc/profile Global, puis ~/.profile Et les paramètres/variables qui y sont mentionnés sont initialisés. Cependant, vous ne voyez pas ce shell comme terminal car l'interface graphique du système X-window est en cours d'exécution.
  • Après la connexion lorsque vous ouvrez un terminal/émulateur de terminal secondaire, par exemple gnome-terminal~/.bashrc Est lu et les paramètres/variables qui y sont déclarés sont disponibles uniquement pour le terminal secondaire. Notez que ce terminal secondaire est un processus enfant de votre shell de connexion.
  • Lorsque vous lancez une application à partir du menu, elle est exécutée en tant que processus enfant de votre shell de connexion et hérite des paramètres de son processus ancêtre. Mais .bashrc N'était pas disponible pour le shell de connexion principal; il n'est donc pas disponible pour les applications également. Par conséquent, rien dans .bashrc Ne sera disponible pour ces applications s'il est exécuté à partir du menu. Mais lorsque vous ouvrez un gnome-terminal Et exécutez la commande à partir de là, les applications sont lancées en tant qu'enfants de gnome-terminal Et en héritent les paramètres de .bashrc.
7
Samik