Estoy usando las computadoras de mi escuela y me gustaría usarlas en zsh
lugar de bash
. Me gustaría convertirlo en el shell predeterminado, pero no puedo ejecutar un comando, como $ chsh -s $(which zsh)
porque no tengo privilegios de administrador.
¿Hay alguna manera de poner algo en mi .bashrc
o algo que llame automáticamente zsh
cuando se abre como una solución?
Para aclarar, zsh
ya está instalado.
zsh
el.bashrc
archivo. Cerrar sesión e iniciar sesión y listo!zsh
en la primera línea?bash
se llama explícitamente. Mejor colóquelo en su.bash_profile
lugar.Respuestas:
Cree
.bash_profile
en su directorio personal y agregue estas líneas:Actualización:
.profile
puede funcionar como una solución general cuando el shell predeterminado no es bash. No estoy seguro de si.profile
Zsh también puede llamarlo para que sea redundante, pero podemos hacerlo de forma segura con una simple verificación:También podemos usar
which
para obtener la ruta dinámicazsh
que se basa en el valor de$PATH
:fuente
.bash_profile
no será referenciado. ¿Qué tal poner esto en su.profile
lugar?.profile
hice no funcionó. ¿También no.profile
sería llamado porZsh
? Podría ser redundante. Sin embargo, todavía no lo he comprobado. (Actualización: funcionó ahora, no estoy seguro de qué error cometí antes). ¿Alguna idea sobre posibles inconvenientes con el uso.profile
?.profile
si.bash_profile
no existe (a menos que lo obtenga manualmente.bash_profile
, por supuesto). En concreto, las fuentes de bash el primero de los archivos [.bash_profile
>.bash_login
>.profile
] que encuentra. Solo se busca.profile
como una característica de compatibilidad POSIX (Bourne shell).zsh
..bash_profile
y.profile
no funcionó (los archivos ni siquiera fueron ejecutados, Fedora 26 en una computadora de la universidad).Normalmente puede usarlo
chsh
como usuario no root. Pero ocasionalmente está deshabilitado, generalmente en sitios que usan alguna forma de base de datos de usuarios en red como NIS y LDAP. Puede haber unypchsh
(NIS) ochsh.ldap
(LDAP) en su lugar.chsh
Por lo general, también permitirá solo algunos shells aprobados , generalmente los que se enumeran en/etc/shells
.Si no puede usar
chsh
o sus variantes en su sitio, organice su shell de inicio de sesión enexec
su shell favorito y configure laSHELL
variable para que apunte a su shell favorito.Si su shell de inicio de sesión es
sh
,dash
oksh
: el archivo que necesita editar es~/.profile
. Tenga en cuenta que este archivo se lee al comienzo de una sesión interactiva, así como por algunos scripts de inicio de sesión no interactivos (por ejemplo, para sesiones X11), por lo que debe tener cuidado: solo llameexec
(que reemplaza el proceso actual) cuando el actual Shell es interactivo. Excepto por el shell Bourne (el/bin/sh
de Solaris 10 y anteriores), puede decir que un shell es interactivo por la presencia dei
en la lista de opciones ($-
).Si quieres que zsh lea tu
.zprofile
, pasa la-l
opción.Si su shell de inicio de sesión es
bash
, puede continuar como se indicó anteriormente. Alternativamente, puede poner estos comandos en~/.bash_profile
. La mayoría de los scripts de inicio de sesión solo leen~/.profile
y no~/.bash_profile
, pero he visto algunos que se ejecutan en bash y read.bash_profile
, por lo que incluso allí debe tener cuidado de no llamarexec
a un shell no interactivo.Si su shell de inicio de sesión es csh o tcsh, consulte un ejemplo en Cambio del shell predeterminado sin chsh o privilegios de administrador
fuente
Creo que el comando
chsh
es para este mismo propósito. Aunque, no estoy seguro de que todas las distribuciones de Linux / Unix lo admitan. Consulte la página del manual dechsh
.fuente
passwd -s
.Si no puede ejecutar
chsh
porque no tiene privilegios de administrador, hable con alguien que sí lo tenga .Lo más probable es que no pueda usarlo
chsh
como no root porque el sistema que está usando está configurado para quechsh
no funcione, por ejemplo, porque el sistema usa NIS o LDAP en lugar de solo el/etc/passwd
archivo. O tal vez el administrador de su sistema solo quiere mantener algo de control.El procedimiento para cambiar su shell depende de las políticas de su organización. Puede haber un comando local que haga lo que
chsh
normalmente hace. O puede que tenga que enviar un ticket de soporte solicitando un cambio de shell.La mayoría de las otras respuestas son buenas, pero si sus administradores responden razonablemente, es posible que no quiera molestarse en hackear sus scripts de inicio. Probablemente solo invoque
zsh -l
manualmente después de iniciar sesión hasta que el administrador pueda actualizar mi cuenta.Otra cosa a tener en cuenta: a veces, diferentes shells pueden usar los mismos archivos de inicio. Por ejemplo,
sh
ybash
puede tanto ejecutar$HOME/.profile
, ycsh
ytcsh
ambos pueden ejecutar$HOME/.login
y$HOME/.cshrc
(aunque los archivos de inicio de caparazón específicos como.bashrc
,.bash_profile
y.tcshrc
puede anular los). Si su shell predeterminado es/bin/csh
y desea utilizarlo/bin/tcsh
, actualizar su.login
invocación/bin/tcsh -l
podría crear un bucle infinito.zsh
no ejecutabash
archivos de inicio específicos, por lo que no es un problema para usted.La mayoría de las conchas establecen variables que identifican qué shell se está ejecutando (
$BASH_VERSION
,$tcsh
,$ZSH_VERSION
). Si va a escribir un código de inicio para invocar su shell preferido, no es una mala idea encerrarlo deif
manera que se ejecute solo si aún no está ejecutando ese shell. Usando el código de la respuesta de konsolebox :(La complicación añadida de comprobación
"${ZSH_VERSION:-unset}"
en lugar de sólo"$ZSH_VERSION"
admite la posibilidad de que usted ha hechoset -o unset
, una opción que hace que una referencia a una variable no definida para ser un error).fuente
Puedo pensar en algunos escenarios.
zsh
no está en/etc/shells
, y el OP desea usarlo sin tener que escribirzsh
en el símbolo del sistema. Soluciones posibles.a) use trucos de perfil para ejecutarlo al iniciar sesión. Esto es tan efectivo como cambiar el caparazón.
b) pedir al administrador añadir
zsh
a/etc/shells
lo que puedechsh
a ellac) rogarle al administrador que cambie su shell. esto no es sabio, porque te perderá la capacidad de entrar
ftp
. Solo puedes usarloftp
si tienes un caparazón en/etc/shells
el usuario desea escapar de un shell restringido, muy probablemente
rbash
orsh
.Si
.profile
es editable,PATH
se puede ampliar editándolo. Una vez que/bin
está en el camino, puede comenzarbash
desde adentrorsh/rbash
, obteniendo acceso alchsh
comando que le permite cambiar los shells. Muchos comandos tienen escapes de shell que se pueden usar para escapar de un shell restringido y recuperar el accesochsh
.chsh
Realmente no funciona por alguna otra razón. La solución de la posibilidad 1 es una respuesta aquí también.El escenario 2 es la única razón para cambiar realmente el shell predeterminado (es demasiado restrictivo).
fuente
No creo que la respuesta proporcionada realmente haga
zsh
el shell predeterminado. Simplemente cambia el shell a zsh tan pronto como el usuario inicia sesión en su shell predeterminado . El usuario todavía iniciará sesión en suDEFAULT SHELL
pero con esto, el shell cambiará azsh
Para cambiar el uso predeterminado del shell:
Deberías ser root para hacer eso.
De lo contrario, la solución anterior será útil.
Agregado del comentario
y puede ser invocado por el usuario por sí mismo.
fuente
chsh -s /path/to/zsh
es más estándar y generalmente (pero no siempre) no requiere acceso de root, a diferencia de lousermod
que siempre hace. Por lo tanto, su respuesta tiene más problemas de lo que la pregunta ya dice que no funciona.