Comment passer d'un shell inconnu à bash?

41

J'ai été surpris de ne pas avoir déjà trouvé cette question sur le site. Donc, aujourd'hui $est arrivé après que je me suis connecté en tant que nouvel utilisateur. Cela était inattendu car l'invite de mon utilisateur principal commence par username@computername:~$.

Alors, comment puis-je passer de cet autre shell à bash?

mouche
la source
8
Ce n'est pas parce que c'est $arrivé que username@computername:~$ça ne veut pas dire que c'était bash. Le formatage exact de l'invite est défini par la variable PS1, qui peut être configurée ou personnalisée différemment pour différents utilisateurs.
frabjous
3
@mouche Re: @frabjous echo $SHELLpour savoir quel est votre shell actuel.
xenoterracide
1
@ mouche @frabjous et commençant avec un $ est commun pour bash, certains shells non bash comme zsh utilisent le% out of the box, je pense que d'autres shells utilisent d'autres éléments.
xenoterracide
1
@mouche être /bin/shsouvent ne veut pas dire grand chose, c'est en général un lien symbolique vers autre chose. Je taperais ls -l /bin/shpour voir ce que c'est un lien symbolique vers. Dans certains cas, être un lien symbolique vers quelque chose change son comportement, je ne pense pas que bash soit comme ça.
xenoterracide
3
@xenoterracide - L'utilisation de bashas /bin/sh désactive de nombreuses fonctionnalités de bash (passe en mode de conformité POSIX).
Chris Down

Réponses:

61

En supposant que le shell inconnu supporte l'exécution d'une commande absolue, vous pouvez essayer: /bin/bash

Pour changer le shell par défaut, je voudrais utiliser chsh(1). Exemple d'utilisation:chsh -s /bin/bash $USER

Kevin M
la source
1
Est-ce que chsh change en permanence le shell ou juste pour la session en cours?
mouche
10
@mouche en permanence; ça change ton entrée dans/etc/passwd
Michael Mrozek
@mouche, chsh(1)ne permettra que de passer à un shell listé dans /etc/shells(et disponible, vraisemblablement). chsh -lliste les alternatives. Soyez prudent, certains (comme nologin) sont définis pour des comptes qui ne doivent jamais être utilisés pour vous connecter (bon moyen de vous verrouiller), il pourrait y avoir des ajouts locaux pour des utilisations spéciales.
vonbrand
19

Vous tapez dans bash. Si vous voulez que ce soit une modification permanente du shell /bin/bashpar défaut en le modifiant /etc/passwd.

Voici quelques extraits de mon /etc/passwd:

avahi:x:84:84:Avahi daemon:/:/bin/false
xenoterracide:x:1000:100::/home/xenoterracide:/bin/zsh
postgres:x:88:88::/var/lib/postgres:/bin/zsh
bob:x:1001:1001::/home/bob:/bin/bash
usbmux:x:140:140:usbmux user:/:/sbin/nologin

Le tout dernier champ contient le shell. La modification du champ suivant le dernier :en un shell valide ou invalide fonctionnera. /bin/falseet les /sbin/nologindeux signifient que l'utilisateur n'a pas de shell de connexion réel, bien que si pam n'est pas configuré correctement, cela ne signifie pas qu'ils ne peuvent pas se connecter (j'ai signalé un bogue dans Arch Linux, car vous pouvez vous connecter graphiquement sans avoir un shell de connexion). /bin/bashet /bin/zshsont tous deux des shells valides, voir /etc/shellsla liste des shells valides sur vos systèmes. Voici mon /etc/shellssi vous êtes intéressé.

/bin/sh
/bin/bash
/bin/ksh
/bin/zsh
/bin/dash

Oui, vous pouvez utiliser chshou usermodfaire les mêmes choses, rappelez-vous que ce ne sont que des fichiers texte structurés, et TIMTOWTDI.

xénoterracide
la source
11
Vous voudrez probablement utiliser chshau lieu de modifier manuellementpasswd
Michael Mrozek
@ Michael, il y a environ 5 (POOMA) différentes façons de changer de shell. /etc/passwdJe n'avais pas envie d'en lister une, parce que je le fais toujours manuellement. chsh et usermod peuvent le faire.
xenoterracide
La mauvaise idée de jouer avec les fichiers de configuration est une mauvaise idée, une erreur peut rendre le système inutilisable. Oui, c’est souvent le seul moyen / le plus rapide, mais faites-le avec une extrême prudence .
vonbrand
12

Si chsh ou l'édition manuelle de la configuration ne fonctionne pas, mais qu'un script ~ / .profile est exécuté lors de la connexion, ajoutez cette ligne:

exec /bin/bash --login
Kevin Cantu
la source
Après avoir regardé pendant un moment, c'était la solution dont j'avais besoin. Merci!
PearsonArtPhoto
Excellente idée, surtout si le shell sélectionne les sources qui se
trouvent
touch ~/.bash_profileou sinon bash s’exécutera dans une boucle: bash prend ~/.profileau cas où cela ~/.bash_profilen’existerait pas.
Har-Wradim