El administrador de sistemas de Unix donde estoy trabajando es reacio a darme acceso para cambiar mi shell de inicio de sesión de ksh
a bash
. Ha dado varias excusas, la más divertida es que ya que escriben todos sus guiones para ksh
no funcionarán si trato de ejecutarlos. No sé de dónde saca estas ideas, pero como no puedo convencerlo, ¿hay alguna alternativa que tenga?
(chsh
está instalado en estas máquinas, pero usamos pares de claves pública/privada para iniciar sesión, y no tengo ninguna contraseña, así que cuando chsh
me pide una contraseña no tengo nada que darle. )
Respuesta aceptada:
Cuando inicia sesión, el archivo ~/.profile
es leído por el shell de inicio de sesión (ksh para usted). Puede indicarle a ese shell de inicio de sesión que se reemplace por bash. Debes tomar algunas precauciones:
- Solo reemplace el shell de inicio de sesión si es interactivo. Esto es importante:de lo contrario, es posible que no funcione el inicio de sesión en modo gráfico (esto depende del sistema:algunos sistemas, pero no todos, leen
~/.profile
al iniciar sesión a través de xdm o similar), y modismos comossh foo '. ~/.profile; mycommand'
fallará. - Compruebe que bash esté disponible, de modo que aún pueda iniciar sesión si el ejecutable no está allí por algún motivo.
Tiene la opción de ejecutar bash como shell de inicio de sesión o no. La única diferencia importante al convertirlo en un shell de inicio de sesión es que cargará ~/.bash_profile
o ~/.profile
. Entonces, si ejecuta bash como shell de inicio de sesión, tenga mucho cuidado de tener un ~/.bash_profile
o tenga cuidado de no ejecutar bash recursivamente desde ~/.profile
. No hay una ventaja real de tener ~/.profile
ejecutado por bash en lugar de ksh, por lo que recomiendo no hacerlo.
También configure el SHELL
variable de entorno para bash, de modo que los programas como los emuladores de terminal invoquen ese shell.
Aquí hay un código para cambiar a bash. Póngalo al final de ~/.profile
.
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