Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

changer de shell sous hp ux

9 réponses
Avatar
did
Salut

j'ai installé zsh sur une station tournant sous HP-UX (je ne connais pas
la version). Je souhaiterais utiliser zsh. En consultant le manuel de
chsh, on me dit qu'il faut que le shell soit référencé dans le fichier
/etc/shells. Or, je n'ai pas le droit d'écrire dans ce fichier. Comment
puis-je faire pour pouvoir dire que je veux utiliser zsh avc chsh, sans
qu'il me jette? Actuellement, je suis sous bash. Dans le fichier
.bashrc, j'ai fé un exec /mon/repertoire/vers/zsh. Je pense pas que ce
soit joli mais bon, j'ai trouvé que ça ;)

Merci d'éclairer ma lanterne

did

9 réponses

Avatar
Stephane Chazelas
2004-09-28, 13:11(+02), did:
j'ai installé zsh sur une station tournant sous HP-UX (je ne connais pas
la version). Je souhaiterais utiliser zsh. En consultant le manuel de
chsh, on me dit qu'il faut que le shell soit référencé dans le fichier
/etc/shells. Or, je n'ai pas le droit d'écrire dans ce fichier. Comment
puis-je faire pour pouvoir dire que je veux utiliser zsh avc chsh, sans
qu'il me jette? Actuellement, je suis sous bash. Dans le fichier
.bashrc, j'ai fé un exec /mon/repertoire/vers/zsh. Je pense pas que ce
soit joli mais bon, j'ai trouvé que ça ;)
[...]


Tu peux mettre:

SHELL=/mon/repertoire/vers/zsh
export SHELL
case $- in *i*) exec "$SHELL";; esac

a la find de ton ~/.profile

faire un chsh et mettre /bin/sh a la place de bash puisque tu
n'as plus besoin de bash.

SHELL est utilisé par des applis comme xterm pour savoir quel
shell lancer.

--
Stephane

Avatar
did

Tu peux mettre:

SHELL=/mon/repertoire/vers/zsh
export SHELL
case $- in *i*) exec "$SHELL";; esac

a la find de ton ~/.profile

faire un chsh et mettre /bin/sh a la place de bash puisque tu
n'as plus besoin de bash.

SHELL est utilisé par des applis comme xterm pour savoir quel
shell lancer.



mmm oki, j'avais definit SHELL comme indiqué ci dessus. Je vais rajouter
le case.

Merci :)
did

Avatar
Laurent Wacrenier
Stephane Chazelas écrit:
SHELL=/mon/repertoire/vers/zsh
export SHELL
case $- in *i*) exec "$SHELL";; esac

a la find de ton ~/.profile


ajouter aussi l'option "-l" si $0 commence par un "-".

Faire un
text -x $SHELL
avant tout, pour être plus sûr.

Avatar
Stephane Chazelas
2004-09-29, 09:12(+00), Laurent Wacrenier:
Stephane Chazelas écrit:
SHELL=/mon/repertoire/vers/zsh
export SHELL
case $- in *i*) exec "$SHELL";; esac

a la find de ton ~/.profile


ajouter aussi l'option "-l" si $0 commence par un "-".


Si on met ca dans ~/.profile, c'est que c'est un shell de login.

Si on lance le nouveau shell avec -l, on va avoir une boucle
infinie, vu que le nouveau shell va relire le ~/.profile.

Ce qu'on peut faire c'est mettre au debut du ~/.profile (mais
/etc/profile va etre lu deux fois quand-meme):

new_SHELL=/mon/repertoire/vers/zsh
if [ "x$SHELL" != "x$new_SHELL" ] && [ -x "$SHELL" ]; then
SHELL=$new_SHELL export SHELL
case $- in *i*) exec "$SHELL" -l;; esac
fi

--
Stephane


Avatar
Laurent Wacrenier
Stephane Chazelas écrit:
ajouter aussi l'option "-l" si $0 commence par un "-".


Si on met ca dans ~/.profile, c'est que c'est un shell de login.

Si on lance le nouveau shell avec -l, on va avoir une boucle
infinie, vu que le nouveau shell va relire le ~/.profile.


Si on lance "zsh -l", $0 vaut "zsh" et non pas "-zsh" ou "-sh", comme
ce que mettrait "login".


Avatar
Stephane Chazelas
2004-09-29, 10:31(+00), Laurent Wacrenier:
ajouter aussi l'option "-l" si $0 commence par un "-".
[...]



Si on lance "zsh -l", $0 vaut "zsh" et non pas "-zsh" ou "-sh", comme
ce que mettrait "login".


Ah oui, bien sur, au temps pour moi.

Moi, je prefere:

1
- le shell de login est celui de /etc/passwd
- on redefinit le shell de *preference* dans ~/.profile
- et on le lance pour les sessions interactives

que

2
- on redefinit le shell de login dans ~/.profile
- on le lance

Le 2 a l'avantage de lancer le ~/.<nouveaushell>logout lors du
logout d'une session terminal. Mais le 1 a l'avantage d'etre
coherent en faisant la distinction entre "shell de login" et
"shell de preference" (en particulier pour les sessions X ou non
interactives), le 2 etant plus une bidouille qui marchouille
(on ne redefinit pas vraiment le shell de login, getpwnam
retourne toujours le /vrai/ "shell de login"). Le 2 va aussi
lire deux fois les /etc/profile

Cela dit, l'un comme l'autre est probablement satisfaisant pour
l'OP.

--
Stephane



Avatar
did
Stephane Chazelas wrote:

Si on met ca dans ~/.profile, c'est que c'est un shell de login.

Si on lance le nouveau shell avec -l, on va avoir une boucle
infinie, vu que le nouveau shell va relire le ~/.profile.

Ce qu'on peut faire c'est mettre au debut du ~/.profile (mais
/etc/profile va etre lu deux fois quand-meme):

new_SHELL=/mon/repertoire/vers/zsh
if [ "x$SHELL" != "x$new_SHELL" ] && [ -x "$SHELL" ]; then
SHELL=$new_SHELL export SHELL
case $- in *i*) exec "$SHELL" -l;; esac
fi



Je comprends pas trop pourquoi on fait tout ça... :/ Pourquoi ça serait
pas bien de mettre juste :

SHELL=/mon/repertoire/vers/zsh
export SHELL

exec $SHELL

Si quelqu'un peut m'expliquer, ça serait cool :)

did

Avatar
Stephane Chazelas
2004-10-01, 09:26(+02), did:
[...]
new_SHELL=/mon/repertoire/vers/zsh
if [ "x$SHELL" != "x$new_SHELL" ] && [ -x "$SHELL" ]; then
SHELL=$new_SHELL export SHELL
case $- in *i*) exec "$SHELL" -l;; esac
fi



Je comprends pas trop pourquoi on fait tout ça... :/ Pourquoi ça serait
pas bien de mettre juste :

SHELL=/mon/repertoire/vers/zsh
export SHELL

exec $SHELL
[...]


Si on lance le shell avec l'option "-l" (option qui n'est pas
reconnues par tous les shells), ca en fait un shell de login.
Dans ce cas, il source les fichiers /etc/profile (ou zprofile,
zlogin, csh.login, bashprofile suivant le shell), ~/.profile, se
comportent legerement differemment (par exemple vis-a-vis de la
commande "logout" sous csh/zsh) et a la fin, certains vont
sourcer des fichiers ~/.logout (~/.zlogout...). (Ca peut etre
utile).

Donc, si tu te contentes de mettre un exec "$SHELL" -l dans ton
~/.profile, tu auras une boucle infinie (le nouveau shell va
relire ce .profile et refaire un exec et ainsi de suite), d'ou
le if [ "x$SHELL" != "x$new_SHELL" ]

Le [ -x "$SHELL" ], ca peut-etre utile, car si ce shell n'est
pas executable, tu ne pourras plus te logguer.

case $- in *i*) ca verifie que le shell est interactif. Ca
peut-etre utile pour le cas ou ~/.profile est lu par exemple par
le Xsession pour demarrer une session X. Si tu mets un "exec
zsh" alors que Xsession fait:

"$loginShell" -c '. "$HOME/.profile"; exec dtsession'

dtsession ne va pas etre lancé.

--
Stephane


Avatar
did
Stephane Chazelas wrote:


case $- in *i*) ca verifie que le shell est interactif. Ca
peut-etre utile pour le cas ou ~/.profile est lu par exemple par
le Xsession pour demarrer une session X. Si tu mets un "exec
zsh" alors que Xsession fait:

"$loginShell" -c '. "$HOME/.profile"; exec dtsession'

dtsession ne va pas etre lancé.



merci beaucoup :)