Je suis sous Ubuntu 10.04 et mon shell est le bash. Dans mon fichier
~/.profile, j'ai ceci :
#--------------
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
#--------------
Autrement dit, je pensais (à tort) que mon ~/.bashrc était
systématiquement «inclus» dans le ~/.profile. Or, ce n'est pas
exactement le cas :
1) Quand je me connecte au système via un terminal, l'inclusion est bien
effectuée car j'ai BASH_VERSION qui est effectivement non vide.
2) Mais quand je me connecte au système via l'interface graphique
(gnome), alors là j'ai pu constater que BASH_VERSION version était vide
et donc que l'inclusion du ~/.bahrc ne se faisait pas.
Je ne comprends pas trop le cas 2), alors que mon shell par défaut est
bien le bash comme en témoigne ceci :
Avez-vous une explication ? Cela me gêne un peu car j'ai des modifs dans
~/.bashrc que j'aimerais bien laisser dans ce fichier et qui du coup ne
prennent pas effet dès que je me connecte via gnome.
Le 11/11/2010 20:09 dans fr.comp.os.linux.configuration Francois Lafont nous expliquait:
2) Mais quand je me connecte au système via l'interface graphique (gnome), alors là j'ai pu constater que BASH_VERSION version était vide et donc que l'inclusion du ~/.bahrc ne se faisait pas.
Je ne comprends pas trop le cas 2), alors que mon shell par défaut est bien le bash comme en témoigne ceci :
Avez-vous une explication ? Cela me gêne un peu car j'ai des modifs dans ~/.bashrc que j'aimerais bien laisser dans ce fichier et qui du coup ne prennent pas effet dès que je me connecte via gnome.
Je ne sais pas quel émulateur de terminal tu utilises quand tu es dans une session Gnome et je n'utilise pas Gnome mais j'ai déjà eu un cas similaire (il me semble que c'était avec Enlightenment).
Pour obtenir le comportement que tu souhaites, il suffisait de selectionner une option de l'émulateur dont le nom devait ressembler à "Utiliser un shell de connexion" sans quoi le terminal s'ouvrait mais ne prenait pas en compte ni les colorations que j'avais définies, ni les alias de commandes etc...
HTH -- @+ Doug - Linux user #307925 - Slackware64 roulaize ;-) Usenet-fr ? Mais qu'est-ce que c'est ? Comment ça marche ? Pour en savoir plus : http://usenet-fr.dougwise.org/
Le 11/11/2010 20:09 dans fr.comp.os.linux.configuration Francois Lafont
nous expliquait:
2) Mais quand je me connecte au système via l'interface graphique
(gnome), alors là j'ai pu constater que BASH_VERSION version était vide
et donc que l'inclusion du ~/.bahrc ne se faisait pas.
Je ne comprends pas trop le cas 2), alors que mon shell par défaut est
bien le bash comme en témoigne ceci :
Avez-vous une explication ? Cela me gêne un peu car j'ai des modifs dans
~/.bashrc que j'aimerais bien laisser dans ce fichier et qui du coup ne
prennent pas effet dès que je me connecte via gnome.
Je ne sais pas quel émulateur de terminal tu utilises quand tu es dans
une session Gnome et je n'utilise pas Gnome mais j'ai déjà eu un cas
similaire (il me semble que c'était avec Enlightenment).
Pour obtenir le comportement que tu souhaites, il suffisait de
selectionner une option de l'émulateur dont le nom devait ressembler à
"Utiliser un shell de connexion" sans quoi le terminal s'ouvrait mais
ne prenait pas en compte ni les colorations que j'avais définies, ni les
alias de commandes etc...
HTH
--
@+
Doug - Linux user #307925 - Slackware64 roulaize ;-)
Usenet-fr ? Mais qu'est-ce que c'est ? Comment ça marche ?
Pour en savoir plus : http://usenet-fr.dougwise.org/
Le 11/11/2010 20:09 dans fr.comp.os.linux.configuration Francois Lafont nous expliquait:
2) Mais quand je me connecte au système via l'interface graphique (gnome), alors là j'ai pu constater que BASH_VERSION version était vide et donc que l'inclusion du ~/.bahrc ne se faisait pas.
Je ne comprends pas trop le cas 2), alors que mon shell par défaut est bien le bash comme en témoigne ceci :
Avez-vous une explication ? Cela me gêne un peu car j'ai des modifs dans ~/.bashrc que j'aimerais bien laisser dans ce fichier et qui du coup ne prennent pas effet dès que je me connecte via gnome.
Je ne sais pas quel émulateur de terminal tu utilises quand tu es dans une session Gnome et je n'utilise pas Gnome mais j'ai déjà eu un cas similaire (il me semble que c'était avec Enlightenment).
Pour obtenir le comportement que tu souhaites, il suffisait de selectionner une option de l'émulateur dont le nom devait ressembler à "Utiliser un shell de connexion" sans quoi le terminal s'ouvrait mais ne prenait pas en compte ni les colorations que j'avais définies, ni les alias de commandes etc...
HTH -- @+ Doug - Linux user #307925 - Slackware64 roulaize ;-) Usenet-fr ? Mais qu'est-ce que c'est ? Comment ça marche ? Pour en savoir plus : http://usenet-fr.dougwise.org/
Francois Lafont
Bonsoir,
Le 12/11/2010 21:37, Doug713705 a écrit :
Je ne sais pas quel émulateur de terminal tu utilises quand tu es dans une session Gnome et je n'utilise pas Gnome mais j'ai déjà eu un cas similaire (il me semble que c'était avec Enlightenment).
Pour obtenir le comportement que tu souhaites, il suffisait de selectionner une option de l'émulateur dont le nom devait ressembler à "Utiliser un shell de connexion" sans quoi le terminal s'ouvrait mais ne prenait pas en compte ni les colorations que j'avais définies, ni les alias de commandes etc...
Merci bien pour la réponse.
Dans le terminal de Gnome, j'ai effectivement une option du genre "Utiliser un shell de connexion", mais ça ne résout pas le problème. Ceci étant, je ne crois pas que le problème se situe à ce niveau là. Je crois que je n'ai pas été très clair dans mon premier message. Je vais tenter à nouveau une explication, plus précise.
Dans le fichier /home/francois/.profile j'ai ça :
#-------------- if [ -n "$BASH_VERSION" ]; then # include .bashrc if it exists if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi fi #--------------
Supposons que dans ce même fichier, j'y rajoute à la fin la ligne suivante :
Ceci étant déjà fait, j'allume mon PC ce qui démarre Ubuntu (10.04). Une fois le démarrage terminé, je me retrouve devant une interface graphique qui me propose d'ouvrir une session avec tel ou tel compte (je crois que le programme qui lance cette interface s'appelle gdm). Je peux alors ouvrir une session de deux façons :
1) Soit en ouvrant une session via l'interface graphique de manière très classique (je clique sur le compte "francois" et je tape le mot de passe) et là visiblement le fichier .bashrc n'est pas lu et c'est ce qui me pose problème. En effet, lors de l'ouverture de session, j'ai bien le fichier out.txt qui est créé sur mon Bureau mais il contient une ligne vide. Donc la variable BASH_VERSION est vide (j'ignore pourquoi) et le .bashrc n'est donc pas lu par mon shell de connexion (c'est là mon problème).
2) Soit en faisant un CTRL-ALT-F1 et en ouvrant une session en ligne de commande sur le terminal tty1 et là le fichier out.txt est bien créé (s'il n'existe pas encore) ou bien une ligne y est ajoutée et cette ligne est "4.1.5(1)-release". Là, BASH_VERSION est donc non vide et le .bashrc est bien «chargé».
Le cas 1) me pose problème. Je ne comprends pas, alors que mon shell par défaut est le bash, que dans le cas 1) je puisse avoir BASH_VERSION vide (et donc que le .bashrc ne soit pas «chargé»)
-- François Lafont
Bonsoir,
Le 12/11/2010 21:37, Doug713705 a écrit :
Je ne sais pas quel émulateur de terminal tu utilises quand tu es dans
une session Gnome et je n'utilise pas Gnome mais j'ai déjà eu un cas
similaire (il me semble que c'était avec Enlightenment).
Pour obtenir le comportement que tu souhaites, il suffisait de
selectionner une option de l'émulateur dont le nom devait ressembler à
"Utiliser un shell de connexion" sans quoi le terminal s'ouvrait mais
ne prenait pas en compte ni les colorations que j'avais définies, ni les
alias de commandes etc...
Merci bien pour la réponse.
Dans le terminal de Gnome, j'ai effectivement une option du genre
"Utiliser un shell de connexion", mais ça ne résout pas le problème.
Ceci étant, je ne crois pas que le problème se situe à ce niveau là. Je
crois que je n'ai pas été très clair dans mon premier message. Je vais
tenter à nouveau une explication, plus précise.
Dans le fichier /home/francois/.profile j'ai ça :
#--------------
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
#--------------
Supposons que dans ce même fichier, j'y rajoute à la fin la ligne suivante :
Ceci étant déjà fait, j'allume mon PC ce qui démarre Ubuntu (10.04). Une
fois le démarrage terminé, je me retrouve devant une interface graphique
qui me propose d'ouvrir une session avec tel ou tel compte (je crois que
le programme qui lance cette interface s'appelle gdm). Je peux alors
ouvrir une session de deux façons :
1) Soit en ouvrant une session via l'interface graphique de manière très
classique (je clique sur le compte "francois" et je tape le mot de
passe) et là visiblement le fichier .bashrc n'est pas lu et c'est ce qui
me pose problème. En effet, lors de l'ouverture de session, j'ai bien le
fichier out.txt qui est créé sur mon Bureau mais il contient une ligne
vide. Donc la variable BASH_VERSION est vide (j'ignore pourquoi) et le
.bashrc n'est donc pas lu par mon shell de connexion (c'est là mon
problème).
2) Soit en faisant un CTRL-ALT-F1 et en ouvrant une session en ligne de
commande sur le terminal tty1 et là le fichier out.txt est bien créé
(s'il n'existe pas encore) ou bien une ligne y est ajoutée et cette
ligne est "4.1.5(1)-release". Là, BASH_VERSION est donc non vide et le
.bashrc est bien «chargé».
Le cas 1) me pose problème. Je ne comprends pas, alors que mon shell par
défaut est le bash, que dans le cas 1) je puisse avoir BASH_VERSION vide
(et donc que le .bashrc ne soit pas «chargé»)
Je ne sais pas quel émulateur de terminal tu utilises quand tu es dans une session Gnome et je n'utilise pas Gnome mais j'ai déjà eu un cas similaire (il me semble que c'était avec Enlightenment).
Pour obtenir le comportement que tu souhaites, il suffisait de selectionner une option de l'émulateur dont le nom devait ressembler à "Utiliser un shell de connexion" sans quoi le terminal s'ouvrait mais ne prenait pas en compte ni les colorations que j'avais définies, ni les alias de commandes etc...
Merci bien pour la réponse.
Dans le terminal de Gnome, j'ai effectivement une option du genre "Utiliser un shell de connexion", mais ça ne résout pas le problème. Ceci étant, je ne crois pas que le problème se situe à ce niveau là. Je crois que je n'ai pas été très clair dans mon premier message. Je vais tenter à nouveau une explication, plus précise.
Dans le fichier /home/francois/.profile j'ai ça :
#-------------- if [ -n "$BASH_VERSION" ]; then # include .bashrc if it exists if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi fi #--------------
Supposons que dans ce même fichier, j'y rajoute à la fin la ligne suivante :
Ceci étant déjà fait, j'allume mon PC ce qui démarre Ubuntu (10.04). Une fois le démarrage terminé, je me retrouve devant une interface graphique qui me propose d'ouvrir une session avec tel ou tel compte (je crois que le programme qui lance cette interface s'appelle gdm). Je peux alors ouvrir une session de deux façons :
1) Soit en ouvrant une session via l'interface graphique de manière très classique (je clique sur le compte "francois" et je tape le mot de passe) et là visiblement le fichier .bashrc n'est pas lu et c'est ce qui me pose problème. En effet, lors de l'ouverture de session, j'ai bien le fichier out.txt qui est créé sur mon Bureau mais il contient une ligne vide. Donc la variable BASH_VERSION est vide (j'ignore pourquoi) et le .bashrc n'est donc pas lu par mon shell de connexion (c'est là mon problème).
2) Soit en faisant un CTRL-ALT-F1 et en ouvrant une session en ligne de commande sur le terminal tty1 et là le fichier out.txt est bien créé (s'il n'existe pas encore) ou bien une ligne y est ajoutée et cette ligne est "4.1.5(1)-release". Là, BASH_VERSION est donc non vide et le .bashrc est bien «chargé».
Le cas 1) me pose problème. Je ne comprends pas, alors que mon shell par défaut est le bash, que dans le cas 1) je puisse avoir BASH_VERSION vide (et donc que le .bashrc ne soit pas «chargé»)
-- François Lafont
Benoit Izac
Bonjour,
le 13/11/2010 à 00:45, Francois Lafont a écrit dans le message <4cddd1b1$0$3421$ :
Dans le fichier /home/francois/.profile j'ai ça :
#-------------- if [ -n "$BASH_VERSION" ]; then # include .bashrc if it exists if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi fi #--------------
Supposons que dans ce même fichier, j'y rajoute à la fin la ligne suivante :
Ceci étant déjà fait, j'allume mon PC ce qui démarre Ubuntu (10.04). Une fois le démarrage terminé, je me retrouve devant une interface graphique qui me propose d'ouvrir une session avec tel ou tel compte (je crois que le programme qui lance cette interface s'appelle gdm). Je peux alors ouvrir une session de deux façons :
1) Soit en ouvrant une session via l'interface graphique de manière très classique (je clique sur le compte "francois" et je tape le mot de passe) et là visiblement le fichier .bashrc n'est pas lu et c'est ce qui me pose problème. En effet, lors de l'ouverture de session, j'ai bien le fichier out.txt qui est créé sur mon Bureau mais il contient une ligne vide. Donc la variable BASH_VERSION est vide (j'ignore pourquoi) et le .bashrc n'est donc pas lu par mon shell de connexion (c'est là mon problème).
Ouvrir une session est différent que d'ouvrir une console ou un terminal qui lance ton shell de login. Essaye avec echo "$0 ($-) $@" >> /home/francois/Bureau/out.txt
2) Soit en faisant un CTRL-ALT-F1 et en ouvrant une session en ligne de commande sur le terminal tty1 et là le fichier out.txt est bien créé (s'il n'existe pas encore) ou bien une ligne y est ajoutée et cette ligne est "4.1.5(1)-release". Là, BASH_VERSION est donc non vide et le .bashrc est bien «chargé».
Le cas 1) me pose problème. Je ne comprends pas, alors que mon shell par défaut est le bash, que dans le cas 1) je puisse avoir BASH_VERSION vide (et donc que le .bashrc ne soit pas «chargé»)
Je pense, la commande ci-dessus devrait le confirmer, que ce n'est pas bash qui est invoqué lorsque tu ouvres ta session.
-- Benoit Izac
Bonjour,
le 13/11/2010 à 00:45, Francois Lafont a écrit dans le message
<4cddd1b1$0$3421$426a74cc@news.free.fr> :
Dans le fichier /home/francois/.profile j'ai ça :
#--------------
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
#--------------
Supposons que dans ce même fichier, j'y rajoute à la fin la ligne suivante :
Ceci étant déjà fait, j'allume mon PC ce qui démarre Ubuntu (10.04). Une
fois le démarrage terminé, je me retrouve devant une interface graphique
qui me propose d'ouvrir une session avec tel ou tel compte (je crois que
le programme qui lance cette interface s'appelle gdm). Je peux alors
ouvrir une session de deux façons :
1) Soit en ouvrant une session via l'interface graphique de manière très
classique (je clique sur le compte "francois" et je tape le mot de
passe) et là visiblement le fichier .bashrc n'est pas lu et c'est ce qui
me pose problème. En effet, lors de l'ouverture de session, j'ai bien le
fichier out.txt qui est créé sur mon Bureau mais il contient une ligne
vide. Donc la variable BASH_VERSION est vide (j'ignore pourquoi) et le
.bashrc n'est donc pas lu par mon shell de connexion (c'est là mon
problème).
Ouvrir une session est différent que d'ouvrir une console ou un terminal
qui lance ton shell de login. Essaye avec
echo "$0 ($-) $@" >> /home/francois/Bureau/out.txt
2) Soit en faisant un CTRL-ALT-F1 et en ouvrant une session en ligne de
commande sur le terminal tty1 et là le fichier out.txt est bien créé
(s'il n'existe pas encore) ou bien une ligne y est ajoutée et cette
ligne est "4.1.5(1)-release". Là, BASH_VERSION est donc non vide et le
.bashrc est bien «chargé».
Le cas 1) me pose problème. Je ne comprends pas, alors que mon shell par
défaut est le bash, que dans le cas 1) je puisse avoir BASH_VERSION vide
(et donc que le .bashrc ne soit pas «chargé»)
Je pense, la commande ci-dessus devrait le confirmer, que ce n'est pas
bash qui est invoqué lorsque tu ouvres ta session.
Ceci étant déjà fait, j'allume mon PC ce qui démarre Ubuntu (10.04). Une fois le démarrage terminé, je me retrouve devant une interface graphique qui me propose d'ouvrir une session avec tel ou tel compte (je crois que le programme qui lance cette interface s'appelle gdm). Je peux alors ouvrir une session de deux façons :
1) Soit en ouvrant une session via l'interface graphique de manière très classique (je clique sur le compte "francois" et je tape le mot de passe) et là visiblement le fichier .bashrc n'est pas lu et c'est ce qui me pose problème. En effet, lors de l'ouverture de session, j'ai bien le fichier out.txt qui est créé sur mon Bureau mais il contient une ligne vide. Donc la variable BASH_VERSION est vide (j'ignore pourquoi) et le .bashrc n'est donc pas lu par mon shell de connexion (c'est là mon problème).
Ouvrir une session est différent que d'ouvrir une console ou un terminal qui lance ton shell de login. Essaye avec echo "$0 ($-) $@" >> /home/francois/Bureau/out.txt
2) Soit en faisant un CTRL-ALT-F1 et en ouvrant une session en ligne de commande sur le terminal tty1 et là le fichier out.txt est bien créé (s'il n'existe pas encore) ou bien une ligne y est ajoutée et cette ligne est "4.1.5(1)-release". Là, BASH_VERSION est donc non vide et le .bashrc est bien «chargé».
Le cas 1) me pose problème. Je ne comprends pas, alors que mon shell par défaut est le bash, que dans le cas 1) je puisse avoir BASH_VERSION vide (et donc que le .bashrc ne soit pas «chargé»)
Je pense, la commande ci-dessus devrait le confirmer, que ce n'est pas bash qui est invoqué lorsque tu ouvres ta session.
-- Benoit Izac
Nicolas George
Francois Lafont , dans le message <4cdc3f6d$0$18805$, a écrit :
Avez-vous une explication ? Cela me gêne un peu car j'ai des modifs dans ~/.bashrc que j'aimerais bien laisser dans ce fichier et qui du coup ne prennent pas effet dès que je me connecte via gnome.
bash est complètement illogique dans sa manière de sourcer des fichiers de configuration. Ça conduit les distributions à faire des conneries sans nom, comme invoquer bash avec l'option pour lui faire se prendre pour un shell de login même s'il ne l'est pas, ou avoir des fichiers qui devraient être indépendants qui se sourcent les uns les autres.
zsh est infiniment plus logique :
- .zshenv et /etc/zsh/zshenv sont sourcés systématiquement, et servent normalement pour l'initialisation de l'environnement (PATH, umask, etc.) ;
- .zprofile et /etc/zsh/zprofile sont sourcés pour tous les shells de login ;
- .zshrc et /etc/zsh/zshrc sont sourcés pour tous les shells interactifs, et servent normalement pour la définition d'options d'interface (raccourcis claviers, options de complétion, alias, etc.).
Francois Lafont , dans le message
<4cdc3f6d$0$18805$426a34cc@news.free.fr>, a écrit :
Avez-vous une explication ? Cela me gêne un peu car j'ai des modifs dans
~/.bashrc que j'aimerais bien laisser dans ce fichier et qui du coup ne
prennent pas effet dès que je me connecte via gnome.
bash est complètement illogique dans sa manière de sourcer des fichiers de
configuration. Ça conduit les distributions à faire des conneries sans nom,
comme invoquer bash avec l'option pour lui faire se prendre pour un shell de
login même s'il ne l'est pas, ou avoir des fichiers qui devraient être
indépendants qui se sourcent les uns les autres.
zsh est infiniment plus logique :
- .zshenv et /etc/zsh/zshenv sont sourcés systématiquement, et servent
normalement pour l'initialisation de l'environnement (PATH, umask, etc.) ;
- .zprofile et /etc/zsh/zprofile sont sourcés pour tous les shells de
login ;
- .zshrc et /etc/zsh/zshrc sont sourcés pour tous les shells interactifs, et
servent normalement pour la définition d'options d'interface (raccourcis
claviers, options de complétion, alias, etc.).
Francois Lafont , dans le message <4cdc3f6d$0$18805$, a écrit :
Avez-vous une explication ? Cela me gêne un peu car j'ai des modifs dans ~/.bashrc que j'aimerais bien laisser dans ce fichier et qui du coup ne prennent pas effet dès que je me connecte via gnome.
bash est complètement illogique dans sa manière de sourcer des fichiers de configuration. Ça conduit les distributions à faire des conneries sans nom, comme invoquer bash avec l'option pour lui faire se prendre pour un shell de login même s'il ne l'est pas, ou avoir des fichiers qui devraient être indépendants qui se sourcent les uns les autres.
zsh est infiniment plus logique :
- .zshenv et /etc/zsh/zshenv sont sourcés systématiquement, et servent normalement pour l'initialisation de l'environnement (PATH, umask, etc.) ;
- .zprofile et /etc/zsh/zprofile sont sourcés pour tous les shells de login ;
- .zshrc et /etc/zsh/zshrc sont sourcés pour tous les shells interactifs, et servent normalement pour la définition d'options d'interface (raccourcis claviers, options de complétion, alias, etc.).
Francois Lafont
Le 13/11/2010 10:00, Nicolas George a écrit :
zsh est infiniment plus logique :
- .zshenv et /etc/zsh/zshenv sont sourcés systématiquement, et servent normalement pour l'initialisation de l'environnement (PATH, umask, etc.) ;
- .zprofile et /etc/zsh/zprofile sont sourcés pour tous les shells de login ;
- .zshrc et /etc/zsh/zshrc sont sourcés pour tous les shells interactifs, et servent normalement pour la définition d'options d'interface (raccourcis claviers, options de complétion, alias, etc.).
Ok, mais finalement c'est quoi exactement un "shell de login" ?
*) Quelle est la différence entre le "shell de login" et le "shell par défaut" (celui qu'on voit dans /etc/password) ?
*) Par exemple, comment (où) puis-je savoir qui est mon shell de login ? Par exemple, quand j'ouvre une session graphiquement, il semblerait que mon shell de login soit sh, mais quand je me logue via tty1, je suis sous le shell bash.
-- François Lafont
Le 13/11/2010 10:00, Nicolas George a écrit :
zsh est infiniment plus logique :
- .zshenv et /etc/zsh/zshenv sont sourcés systématiquement, et servent
normalement pour l'initialisation de l'environnement (PATH, umask, etc.) ;
- .zprofile et /etc/zsh/zprofile sont sourcés pour tous les shells de
login ;
- .zshrc et /etc/zsh/zshrc sont sourcés pour tous les shells interactifs, et
servent normalement pour la définition d'options d'interface (raccourcis
claviers, options de complétion, alias, etc.).
Ok, mais finalement c'est quoi exactement un "shell de login" ?
*) Quelle est la différence entre le "shell de login" et le "shell par
défaut" (celui qu'on voit dans /etc/password) ?
*) Par exemple, comment (où) puis-je savoir qui est mon shell de login ?
Par exemple, quand j'ouvre une session graphiquement, il semblerait que
mon shell de login soit sh, mais quand je me logue via tty1, je suis
sous le shell bash.
- .zshenv et /etc/zsh/zshenv sont sourcés systématiquement, et servent normalement pour l'initialisation de l'environnement (PATH, umask, etc.) ;
- .zprofile et /etc/zsh/zprofile sont sourcés pour tous les shells de login ;
- .zshrc et /etc/zsh/zshrc sont sourcés pour tous les shells interactifs, et servent normalement pour la définition d'options d'interface (raccourcis claviers, options de complétion, alias, etc.).
Ok, mais finalement c'est quoi exactement un "shell de login" ?
*) Quelle est la différence entre le "shell de login" et le "shell par défaut" (celui qu'on voit dans /etc/password) ?
*) Par exemple, comment (où) puis-je savoir qui est mon shell de login ? Par exemple, quand j'ouvre une session graphiquement, il semblerait que mon shell de login soit sh, mais quand je me logue via tty1, je suis sous le shell bash.
-- François Lafont
Benoit Izac
Bonjour,
le 13/11/2010 à 14:49, Francois Lafont a écrit dans le message <4cde974f$0$4288$ :
Au passage, y a-t-il une commande qui peut me donner le shell courant ? Au départ, je pensais que "echo $0" marchait, mais en fait cela fonctionne uniquement dans un shell interactif. Par exemple, si je suis sous le shell bash et que j'ai le script exécutable toto qui contient ceci :
#--------- #! /bin/sh echo $0 #---------
Alors dans le bash, j'ai ça :
#---------------------- $ echo $0 # je suis bien dans le bash bash
$ ./toto ./toto
$ sh toto toto #----------------------
C'est le comportement normal : <http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_05_02> | 0 | (Zero.) Expands to the name of the shell or shell script. See sh | for a detailed description of how this name is derived.
Existe-t-il une commande qui m'indiquera que, lors de l'appel du script toto, c'est bien le shell 'sh' qui est utilisé ?
Pas à ma connaissance. Tu peux faire un truc du genre : $ cat test #!/bin/sh echo "$0 ($-) $@" ps -Ao "pid,args" | awk "/^ *$$/"'{print $2}' $ ./test a b cd ./test (hB) a b cd /bin/sh $ bash ./test a b cd ./test (hB) a b cd bash $ sh -ve test a b cd #!/bin/sh echo "$0 ($-) $@" test (ehvB) a b cd ps -Ao "pid,args" | awk "/^ *$$/"'{print $2}' sh
-- Benoit Izac
Bonjour,
le 13/11/2010 à 14:49, Francois Lafont a écrit dans le message
<4cde974f$0$4288$426a74cc@news.free.fr> :
Au passage, y a-t-il une commande qui peut me donner le shell courant ?
Au départ, je pensais que "echo $0" marchait, mais en fait cela
fonctionne uniquement dans un shell interactif. Par exemple, si je suis
sous le shell bash et que j'ai le script exécutable toto qui contient ceci :
#---------
#! /bin/sh
echo $0
#---------
Alors dans le bash, j'ai ça :
#----------------------
$ echo $0 # je suis bien dans le bash
bash
$ ./toto
./toto
$ sh toto
toto
#----------------------
C'est le comportement normal :
<http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_05_02>
| 0
| (Zero.) Expands to the name of the shell or shell script. See sh
| for a detailed description of how this name is derived.
Existe-t-il une commande qui m'indiquera que, lors de l'appel du script
toto, c'est bien le shell 'sh' qui est utilisé ?
Pas à ma connaissance. Tu peux faire un truc du genre :
$ cat test
#!/bin/sh
echo "$0 ($-) $@"
ps -Ao "pid,args" | awk "/^ *$$/"'{print $2}'
$ ./test a b cd
./test (hB) a b cd
/bin/sh
$ bash ./test a b cd
./test (hB) a b cd
bash
$ sh -ve test a b cd
#!/bin/sh
echo "$0 ($-) $@"
test (ehvB) a b cd
ps -Ao "pid,args" | awk "/^ *$$/"'{print $2}'
sh
le 13/11/2010 à 14:49, Francois Lafont a écrit dans le message <4cde974f$0$4288$ :
Au passage, y a-t-il une commande qui peut me donner le shell courant ? Au départ, je pensais que "echo $0" marchait, mais en fait cela fonctionne uniquement dans un shell interactif. Par exemple, si je suis sous le shell bash et que j'ai le script exécutable toto qui contient ceci :
#--------- #! /bin/sh echo $0 #---------
Alors dans le bash, j'ai ça :
#---------------------- $ echo $0 # je suis bien dans le bash bash
$ ./toto ./toto
$ sh toto toto #----------------------
C'est le comportement normal : <http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_05_02> | 0 | (Zero.) Expands to the name of the shell or shell script. See sh | for a detailed description of how this name is derived.
Existe-t-il une commande qui m'indiquera que, lors de l'appel du script toto, c'est bien le shell 'sh' qui est utilisé ?
Pas à ma connaissance. Tu peux faire un truc du genre : $ cat test #!/bin/sh echo "$0 ($-) $@" ps -Ao "pid,args" | awk "/^ *$$/"'{print $2}' $ ./test a b cd ./test (hB) a b cd /bin/sh $ bash ./test a b cd ./test (hB) a b cd bash $ sh -ve test a b cd #!/bin/sh echo "$0 ($-) $@" test (ehvB) a b cd ps -Ao "pid,args" | awk "/^ *$$/"'{print $2}' sh
-- Benoit Izac
Benoit Izac
Bonjour,
le 13/11/2010 à 14:49, Francois Lafont a écrit dans le message <4cde974f$0$4288$ :
Et oui, bien vu. si j'ai bien tout compris c'est le shell 'sh' qui est utilisé et donc la non inclusion du .bashrc s'explique alors. Du coup, pour que mes modifs dans .bashrc soient lues directement après l'ouverture d'une session graphique, il faut que je me débrouille pour que ce soit le bash par gdm qui soit utilisé et non le sh. Mais là, je crois que je vais m'abstenir de tripatouiller ces choses au risque de tout casser.
J'ai oublié de répondre sur ce point ; le plus simple c'est de modifier/créer ~/.xsession pour y mettre :
#!/bin/bash . ~/.bashrc exec gnome-session
-- Benoit Izac
Bonjour,
le 13/11/2010 à 14:49, Francois Lafont a écrit dans le message
<4cde974f$0$4288$426a74cc@news.free.fr> :
Et oui, bien vu. si j'ai bien tout compris c'est le shell 'sh' qui est
utilisé et donc la non inclusion du .bashrc s'explique alors. Du coup,
pour que mes modifs dans .bashrc soient lues directement après
l'ouverture d'une session graphique, il faut que je me débrouille pour
que ce soit le bash par gdm qui soit utilisé et non le sh. Mais là, je
crois que je vais m'abstenir de tripatouiller ces choses au risque de
tout casser.
J'ai oublié de répondre sur ce point ; le plus simple c'est de
modifier/créer ~/.xsession pour y mettre :
le 13/11/2010 à 14:49, Francois Lafont a écrit dans le message <4cde974f$0$4288$ :
Et oui, bien vu. si j'ai bien tout compris c'est le shell 'sh' qui est utilisé et donc la non inclusion du .bashrc s'explique alors. Du coup, pour que mes modifs dans .bashrc soient lues directement après l'ouverture d'une session graphique, il faut que je me débrouille pour que ce soit le bash par gdm qui soit utilisé et non le sh. Mais là, je crois que je vais m'abstenir de tripatouiller ces choses au risque de tout casser.
J'ai oublié de répondre sur ce point ; le plus simple c'est de modifier/créer ~/.xsession pour y mettre :
#!/bin/bash . ~/.bashrc exec gnome-session
-- Benoit Izac
Nicolas George
Francois Lafont , dans le message <4cde99c0$0$4038$, a écrit :
Ok, mais finalement c'est quoi exactement un "shell de login" ?
C'est un shell lancé pour l'établissement d'une session texte sur la machine, que ce soit en local (mgetty+login) ou par connexion à distance (ssh).
*) Quelle est la différence entre le "shell de login" et le "shell par défaut" (celui qu'on voit dans /etc/password) ?
J'employais le terme shell de login pour désigner le processus. Le même terme peut être employé pour désigner l'option de /etc/passwd. La correspondance est que c'est le shell désigné par /etc/passwd qui est lancé comme shell de login.
Par exemple, quand j'ouvre une session graphiquement
Quand tu ouvres une session graphiquement, aucun shell de login n'est invoqué. La variable $SHELL est probablement initialisée à la valeur indiquée dans /etc/passwd, et divers programmes graphiques peuvent ensuite faire usage de la valeur de $SHELL ou de la valeur dans /etc/passwd, mais c'est totalement à la discrétion de ces programmes.
Francois Lafont , dans le message
<4cde99c0$0$4038$426a74cc@news.free.fr>, a écrit :
Ok, mais finalement c'est quoi exactement un "shell de login" ?
C'est un shell lancé pour l'établissement d'une session texte sur la
machine, que ce soit en local (mgetty+login) ou par connexion à distance
(ssh).
*) Quelle est la différence entre le "shell de login" et le "shell par
défaut" (celui qu'on voit dans /etc/password) ?
J'employais le terme shell de login pour désigner le processus. Le même
terme peut être employé pour désigner l'option de /etc/passwd. La
correspondance est que c'est le shell désigné par /etc/passwd qui est lancé
comme shell de login.
Par exemple, quand j'ouvre une session graphiquement
Quand tu ouvres une session graphiquement, aucun shell de login n'est
invoqué. La variable $SHELL est probablement initialisée à la valeur
indiquée dans /etc/passwd, et divers programmes graphiques peuvent ensuite
faire usage de la valeur de $SHELL ou de la valeur dans /etc/passwd, mais
c'est totalement à la discrétion de ces programmes.
Francois Lafont , dans le message <4cde99c0$0$4038$, a écrit :
Ok, mais finalement c'est quoi exactement un "shell de login" ?
C'est un shell lancé pour l'établissement d'une session texte sur la machine, que ce soit en local (mgetty+login) ou par connexion à distance (ssh).
*) Quelle est la différence entre le "shell de login" et le "shell par défaut" (celui qu'on voit dans /etc/password) ?
J'employais le terme shell de login pour désigner le processus. Le même terme peut être employé pour désigner l'option de /etc/passwd. La correspondance est que c'est le shell désigné par /etc/passwd qui est lancé comme shell de login.
Par exemple, quand j'ouvre une session graphiquement
Quand tu ouvres une session graphiquement, aucun shell de login n'est invoqué. La variable $SHELL est probablement initialisée à la valeur indiquée dans /etc/passwd, et divers programmes graphiques peuvent ensuite faire usage de la valeur de $SHELL ou de la valeur dans /etc/passwd, mais c'est totalement à la discrétion de ces programmes.
Francois Lafont
Le 13/11/2010 19:24, Nicolas George a écrit :
Ok, mais finalement c'est quoi exactement un "shell de login" ?
C'est un shell lancé pour l'établissement d'une session texte sur la machine, que ce soit en local (mgetty+login) ou par connexion à distance (ssh).
Ok.
*) Quelle est la différence entre le "shell de login" et le "shell par défaut" (celui qu'on voit dans /etc/password) ?
J'employais le terme shell de login pour désigner le processus. Le même terme peut être employé pour désigner l'option de /etc/passwd. La correspondance est que c'est le shell désigné par /etc/passwd qui est lancé comme shell de login.
Heu, je ne suis pas sûr d'avoir compris la réponse. Je crois comprendre que "shell de login" est synonyme de "shell par défaut", mais je ne suis pas sûr.
Par exemple, quand j'ouvre une session graphiquement
Quand tu ouvres une session graphiquement, aucun shell de login n'est invoqué.
Ah et bien je ne savais pas. Je pensais que, lors de l'ouverture d'une session graphique, mon shell par défaut était lancé et que c'était lui qui lançait tout le bazar qui fait que j'ai mon environnement de Bureau sous les yeux.
La variable $SHELL est probablement initialisée à la valeur indiquée dans /etc/passwd, et divers programmes graphiques peuvent ensuite faire usage de la valeur de $SHELL ou de la valeur dans /etc/passwd, mais c'est totalement à la discrétion de ces programmes.
Mais ces fameux programmes (gdm dans mon cas), il faut bien qu'ils soient lancés par un shell, non ? J'ai du mal à comprendre comment des programmes puissent être exécutés sans qu'il y ait un shell au départ responsable de cette exécution.
-- François Lafont
Le 13/11/2010 19:24, Nicolas George a écrit :
Ok, mais finalement c'est quoi exactement un "shell de login" ?
C'est un shell lancé pour l'établissement d'une session texte sur la
machine, que ce soit en local (mgetty+login) ou par connexion à distance
(ssh).
Ok.
*) Quelle est la différence entre le "shell de login" et le "shell par
défaut" (celui qu'on voit dans /etc/password) ?
J'employais le terme shell de login pour désigner le processus. Le même
terme peut être employé pour désigner l'option de /etc/passwd. La
correspondance est que c'est le shell désigné par /etc/passwd qui est lancé
comme shell de login.
Heu, je ne suis pas sûr d'avoir compris la réponse. Je crois comprendre
que "shell de login" est synonyme de "shell par défaut", mais je ne suis
pas sûr.
Par exemple, quand j'ouvre une session graphiquement
Quand tu ouvres une session graphiquement, aucun shell de login n'est
invoqué.
Ah et bien je ne savais pas. Je pensais que, lors de l'ouverture d'une
session graphique, mon shell par défaut était lancé et que c'était lui
qui lançait tout le bazar qui fait que j'ai mon environnement de Bureau
sous les yeux.
La variable $SHELL est probablement initialisée à la valeur
indiquée dans /etc/passwd, et divers programmes graphiques peuvent ensuite
faire usage de la valeur de $SHELL ou de la valeur dans /etc/passwd, mais
c'est totalement à la discrétion de ces programmes.
Mais ces fameux programmes (gdm dans mon cas), il faut bien qu'ils
soient lancés par un shell, non ? J'ai du mal à comprendre comment des
programmes puissent être exécutés sans qu'il y ait un shell au départ
responsable de cette exécution.
Ok, mais finalement c'est quoi exactement un "shell de login" ?
C'est un shell lancé pour l'établissement d'une session texte sur la machine, que ce soit en local (mgetty+login) ou par connexion à distance (ssh).
Ok.
*) Quelle est la différence entre le "shell de login" et le "shell par défaut" (celui qu'on voit dans /etc/password) ?
J'employais le terme shell de login pour désigner le processus. Le même terme peut être employé pour désigner l'option de /etc/passwd. La correspondance est que c'est le shell désigné par /etc/passwd qui est lancé comme shell de login.
Heu, je ne suis pas sûr d'avoir compris la réponse. Je crois comprendre que "shell de login" est synonyme de "shell par défaut", mais je ne suis pas sûr.
Par exemple, quand j'ouvre une session graphiquement
Quand tu ouvres une session graphiquement, aucun shell de login n'est invoqué.
Ah et bien je ne savais pas. Je pensais que, lors de l'ouverture d'une session graphique, mon shell par défaut était lancé et que c'était lui qui lançait tout le bazar qui fait que j'ai mon environnement de Bureau sous les yeux.
La variable $SHELL est probablement initialisée à la valeur indiquée dans /etc/passwd, et divers programmes graphiques peuvent ensuite faire usage de la valeur de $SHELL ou de la valeur dans /etc/passwd, mais c'est totalement à la discrétion de ces programmes.
Mais ces fameux programmes (gdm dans mon cas), il faut bien qu'ils soient lancés par un shell, non ? J'ai du mal à comprendre comment des programmes puissent être exécutés sans qu'il y ait un shell au départ responsable de cette exécution.
-- François Lafont
Nicolas George
Francois Lafont , dans le message <4cdf2120$0$7775$, a écrit :
Heu, je ne suis pas sûr d'avoir compris la réponse. Je crois comprendre que "shell de login" est synonyme de "shell par défaut", mais je ne suis pas sûr.
« Shell par défaut », ça n'existe pas en vocabulaire Unix.
J'ai du mal à comprendre comment des programmes puissent être exécutés sans qu'il y ait un shell au départ responsable de cette exécution.
Un programme peut toujours être invoqué par l'appel direct de la fonction système de bas niveau. Utiliser un shell n'est qu'une commodité, pour pouvoir utiliser des notations un peu plus compactes et versatiles, comme le développement de variables d'environnement.
Francois Lafont , dans le message
<4cdf2120$0$7775$426a74cc@news.free.fr>, a écrit :
Heu, je ne suis pas sûr d'avoir compris la réponse. Je crois comprendre
que "shell de login" est synonyme de "shell par défaut", mais je ne suis
pas sûr.
« Shell par défaut », ça n'existe pas en vocabulaire Unix.
J'ai du mal à comprendre comment des
programmes puissent être exécutés sans qu'il y ait un shell au départ
responsable de cette exécution.
Un programme peut toujours être invoqué par l'appel direct de la fonction
système de bas niveau. Utiliser un shell n'est qu'une commodité, pour
pouvoir utiliser des notations un peu plus compactes et versatiles, comme le
développement de variables d'environnement.
Francois Lafont , dans le message <4cdf2120$0$7775$, a écrit :
Heu, je ne suis pas sûr d'avoir compris la réponse. Je crois comprendre que "shell de login" est synonyme de "shell par défaut", mais je ne suis pas sûr.
« Shell par défaut », ça n'existe pas en vocabulaire Unix.
J'ai du mal à comprendre comment des programmes puissent être exécutés sans qu'il y ait un shell au départ responsable de cette exécution.
Un programme peut toujours être invoqué par l'appel direct de la fonction système de bas niveau. Utiliser un shell n'est qu'une commodité, pour pouvoir utiliser des notations un peu plus compactes et versatiles, comme le développement de variables d'environnement.