¿Cómo cambio mi shell predeterminado a bash si no tengo acceso a chsh ni / etc / passwd?

8

Estoy trabajando en una cuenta de Linux remota de la universidad, y el shell predeterminado es lamentablemente cshsin completar la pestaña. ¿Cómo puedo cambiar el shell predeterminado de mi cuenta bash? chshno está disponible.

mcandre
fuente
1
¿Qué sistema usa la universidad para almacenar cuentas? ldapmodifyPodría funcionar.
user1686
O, si están utilizando NIS, ypchshdebería ser el comando adecuado.
m000
Si solo desea completar la pestaña, puede agregarlos a su ~ / .cshrc set filecy set autolist.
Hennes

Respuestas:

11

Probablemente debería intentar preguntar a sus administradores de sistemas si pueden cambiar su shell predeterminado por usted. Si no pueden o no quieren (como fue el caso cuando estaba en la universidad), la solución que usé fue agregar

# Exec bash if using an interactive shell.
if ($?prompt) then
    setenv SHELL /path/to/bash
    exec $SHELL
endif

a .cshrc. (Asegúrese de reemplazar /path/to/bashcon una ruta real, por supuesto. Esta podría incluso ser una versión bashque se encuentra en su directorio de inicio, si la versión proporcionada por el sistema está demasiado desactualizada para su gusto). Para mayor eficiencia, es mejor para hacer esto tan pronto .cshrccomo sea posible, de modo que evite el .cshrcprocesamiento adicional que será discutible una vez que bashreemplace el cshproceso.

jjlin
fuente
Esto no funcionó para mí en mi universidad. Probablemente tendré que hablar con el administrador del sistema.
2rs2ts
3

Podrías simplemente conectarte con

ssh -t yourhost bash

ejecutar el shell Bash automáticamente cuando inicias sesión.


De los comentarios a continuación puedes ver la alternativa

ssh -t yourhost exec bash

execejecutará un nuevo proceso y saldrá del anterior, por lo que el cshproceso saldrá directamente.

Si se agrega -lal final del comando como un argumento para Bash, se tratará como un shell de inicio de sesión, pero quizás eso no sea necesario.

Daniel Andersson
fuente
1
ssh -t yourhost exec -a bash -l bashpara reemplazar el shell original por completo, en lugar de ejecutarse como un proceso dentro del shell inicial.
chepner
@chepner: Interesante, yo mismo estoy usando una ssh -t host bashsolución simple en una situación similar, pero tu camino es mejor. No he pensado execen nada, ¡gracias! Actualizaré la publicación con tu sugerencia.
Daniel Andersson
Sin embargo, me puse un poco elegante usando argumentos para el bashcomando incorporado exec.
chepner
@chepner: Ah sí, lo probé ahora en un host con zsh como shell predeterminado y falla en ambos -ay -l. Modificaré el ejemplo en mi respuesta.
Daniel Andersson
0

La mejor solución que encontré fue una en stackexchange. Aquí está el enlace stackexchange y aquí está la solución:

cree un archivo .profile en su directorio de inicio y pegue lo siguiente, o agréguelo al final de su .profile si ya tiene uno.

case $- in
  *i*)
    # Interactive session. Try switching to bash.
    if [ -z "$BASH" ]; then # do nothing if running under bash already
      bash=$(command -v bash)
      if [ -x "$bash" ]; then
        export SHELL="$bash"
        exec "$bash"
      fi
    fi
esac
MattC
fuente
0

busqué mucho cuando usas la autenticación LADP a través de PAM, creo que la mejor solución es poner SHELL = / bin / bash exec / bin / bash en el archivo .profile en tu directorio de inicio de usuario

usuario454581
fuente