¿Cómo cambio de un shell desconocido a bash?

41

Me sorprendió no haber encontrado esta pregunta en el sitio. Entonces, hoy $surgió después de iniciar sesión como un nuevo usuario. Esto fue inesperado porque la solicitud de mi usuario principal comienza con username@computername:~$.

Entonces, ¿cómo cambio de este otro shell a bash?

mouche
fuente
8
El hecho de que $surgió en lugar de username@computername:~$no significa que no fue una fiesta. El formato exacto de la solicitud se establece mediante la variable PS1, que se puede configurar o personalizar de manera diferente para diferentes usuarios.
frabjous
3
@mouche Re: @frabjous echo $SHELLpara averiguar cuál es tu caparazón actual.
xenoterracide
1
@mouche @frabjous y comenzar con $ es realmente común para bash, algunos shells que no son bash como zsh usan el% fuera de la caja, creo que otros shells usan otras cosas.
xenoterracide
1
@mouche ser a /bin/shmenudo no significa mucho, eso suele ser un enlace simbólico a otra cosa. Escribiría ls -l /bin/shpara ver para qué es un enlace simbólico. En algunos casos, ser un enlace simbólico a algo cambia su comportamiento, no creo que bash sea así.
xenoterracida
3
@xenoterracide: el uso bashcomo /bin/sh deshabilita muchas funciones bash (entra en modo de cumplimiento POSIX).
Chris Down

Respuestas:

61

Suponiendo que el shell desconocido admite la ejecución de un comando absoluto, puede intentar: /bin/bash

Para cambiar el shell predeterminado, usaría chsh(1). Uso de la muestra:chsh -s /bin/bash $USER

Kevin M
fuente
1
¿Chsh cambia permanentemente el shell o solo para la sesión actual?
mouche
10
@mouche permanentemente; cambia su entrada en/etc/passwd
Michael Mrozek
@mouche, chsh(1)solo permitirá cambiar a un shell que aparece en la lista /etc/shells(y está disponible, presumiblemente). chsh -lenumera las alternativas. Tenga cuidado, algunos (como nologin) están definidos para cuentas que nunca deben usarse para iniciar sesión (una buena manera de bloquearse), puede haber adiciones locales para usos especiales.
vonbrand
19

Se escribe en bash. Si desea que esto sea permanente, cambie el shell predeterminado /bin/basheditando /etc/passwd.

Aquí hay algunos fragmentos de mi /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

El último campo contiene el shell, la modificación del campo después del último :a un shell válido o no válido funcionará. /bin/falsey /sbin/nologinambos significan que el usuario no tiene un shell de inicio de sesión real, aunque si pam no está configurado correctamente, esto no significa que no pueden iniciar sesión (informé de un error al respecto en Arch Linux, porque puede iniciar sesión gráficamente sin tener que un shell de inicio de sesión). /bin/bashy /bin/zshson ambas conchas válidas, ver/etc/shells lista de shells válidos en sus sistemas. Aquí está mi /etc/shellssi estás interesado.

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

Sí, puede usar chsho usermodhacer las mismas cosas, recuerde que estos son solo archivos de texto estructurados y TIMTOWTDI.

xenoterracida
fuente
11
Probablemente desee usar en chshlugar de editar manualmentepasswd
Michael Mrozek
@Michael hay alrededor de 5 (POOMA) diferentes formas de cambiar el shell en el /etc/passwdque no tenía ganas de enumerar ninguno de ellos, porque siempre lo hago manualmente. chsh y usermod pueden hacerlo.
xenoterracide
Perder el tiempo con los archivos de configuración es una mala idea (TM), un error puede dejar el sistema inutilizable. Sí, a menudo es la única / más rápida forma, pero luego hazlo con extremo cuidado .
vonbrand
12

Si chsh o la edición manual de la configuración no funciona, pero se ejecuta un script ~ / .profile al iniciar sesión, agregue esta línea:

exec /bin/bash --login
Kevin Cantu
fuente
Después de mirar alrededor por un tiempo, esta fue la solución que necesitaba. ¡Gracias!
PearsonArtPhoto
Gran idea, especialmente si el shell seleccionó las fuentes de ese archivo al inicio ...
vonbrand
touch ~/.bash_profileo de lo contrario, bash se ejecutará en un bucle: bash toma ~/.profileen caso de ~/.bash_profileque no exista.
har-wradim