Pourquoi ne puis-je pas changer le shell avec la commande chsh?

12

J'ai appris une nouvelle commande, du moins je pensais, car cette commande chsh:, ne se comporte pas comme décrit.

Il a été décrit pour fonctionner comme ceci:

  1. cat /etc/shells pour savoir quels coques sont installées, vous pouvez donc choisir parmi eux.
  2. faire echo $SHELLpour savoir quel shell vous utilisez.
  3. choisissez l'une des coquilles et tapez chsh -s /path/to/shell
  4. entrez le mot de passe et vérifiez avec echo $SHELL, que vous êtes dans un nouveau shell.

Je l'ai fait et je n'ai reçu aucun message d'erreur lors de la saisie du mot de passe, mais j'étais toujours dans le même shell.

% echo $SHELL
/bin/bash
% cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
% chsh -s /bin/sh
Password: 
% echo $SHELL
/bin/bash
sharkant
la source
5
Vous devez d'abord vous déconnecter et vous reconnecter.
Rui F Ribeiro
7
Veuillez ne pas publier d'images du texte du terminal. Il peut être copié et collé dans le corps de votre question, et il n'est vraiment pas nécessaire de publier des images, sauf si vous montrez un problème graphique ou quelque chose de similaire.
Sergiy Kolodyazhnyy
J'ai édité mon message, supprimé l'image et collé le texte à la place, mais l'image est revenue pendant la nuit.
sharkant
@sharkant Il semble que quelqu'un ait eu une modification dans une file d'attente de révision et il a été approuvé, ce qui a modifié votre message après coup. Je pensais que le système d'édition SE ne remplacerait pas une nouvelle édition par une ancienne, mais hé, qui sait?
Zan Lynx

Réponses:

19

Déconnectez-vous et reconnectez-vous.

La chshcommande mettra à jour le /etc/passwdfichier, mais elle ne modifie pas le shell actuel ni la valeur de la $SHELLvariable dans le shell actuel (elle n'a aucun moyen de le faire). C'est la raison pour laquelle vous devez vous reconnecter; vous devez démarrer une nouvelle session de connexion pour qu'une modification prenne effet.

Kusalananda
la source
Je ne comprends pas ce qu'est un shell de connexion et comment je sais si je suis dans un shell de connexion ou une sorte de shell non connecté. Comment démarrer une nouvelle session de connexion?
sharkant
1
@sharkant Le fait est que les informations que vous avez modifiées dans le /etc/passwdne sont pas lues jusqu'à votre prochaine connexion. Vous devrez vous déconnecter complètement et vous reconnecter pour que la modification prenne effet. Si vous échouez, le redémarrage de la machine fonctionnera également.
Kusalananda
1
Je pense que je vous comprends cette fois: donc la commande chsh -s / path / to / shell ne change pas immédiatement le shell dans lequel je suis, mais elle change une entrée dans / etc / passwd qui prendra effet au démarrage du shell?
sharkant
@sharkant C'est exactement comme ça que ça marche! Je suis content d'avoir enfin compris ton idée fausse. Je mettrai à jour la réponse.
Kusalananda
1

L' utilisation de la commande utilitaire usermod a fonctionné dans mon cas. Fonctionnant sur Ubuntu 18.04.

  1. Tout d'abord, vérifiez la valeur actuelle

grep nameofuser /etc/passwd

  1. changes le

sudo usermod --shell /bin/bash nameofuser

  1. Vérifiez-le

grep nameofuser /etc/passwd

sandip
la source