Cuando ~/.profileinicia sesión, el archivo 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, el inicio de sesión en modo gráfico puede no funcionar (esto depende del sistema: algunos pero no todos los sistemas leen
~/.profileal iniciar sesión a través de xdm o similar), y las expresiones idiomáticas tales como ssh foo '. ~/.profile; mycommand'fallarán.
- Verifique que bash esté disponible, de modo que aún pueda iniciar sesión si el ejecutable no está allí por alguna razón.
Tiene la opción de ejecutar bash como shell de inicio de sesión o no. La única diferencia importante para convertirlo en un shell de inicio de sesión es que se cargará ~/.bash_profileo ~/.profile. Entonces, si ejecuta bash como shell de inicio de sesión, tenga mucho cuidado de tener ~/.bash_profileo tener cuidado de no ejecutar bash recursivamente desde ~/.profile. No hay una ventaja real de haber ~/.profileejecutado por bash en lugar de ksh, por lo que recomiendo no hacerlo.
Establezca también la SHELLvariable de entorno en bash, para que los programas como los emuladores de terminal invoquen ese shell.
Aquí hay un código para cambiar a bash. Ponlo 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
Gilles 'SO- deja de ser malvado'
fuente
.profilesolo funciona para el shell de inicio de sesión (como OP necesita). Utilizo Remote Desktop Connection de Windows 10 para iniciar sesión en una estación de trabajo Linux, luego abro Terminal en gnome. Quierozshmientras mi administrador me dabash. En este caso, tengo que agregar el fragmento en.bashrclugar de.profile.Esto es un poco complicado, pero puede hacer
bashque sea el shell que está utilizando al iniciar sesión creando un.profilearchivo en su directorio de inicio que contengaEsto hará que la
kshsesión sea reemplazada por unabashsesión. No tendrá que escribirexit(o^D) dos veces, como lo haría si iniciara manualmente una nuevabashsesión cada vez que inicia sesión. Y escribiendoincluso devolverá el camino a
bash.fuente
exec bash -l.typese recomienda más dewhich.bashleerá también.profilegenerando así un bucle infinito? Estoy de acuerdo en que algo asíexec bashes lo que quieres, pero debes asegurarte de hacerlo solo en tu ksh de inicio de sesión, por lo que se requieren algunas declaraciones if.~/.bash_profileo~/.bash_loginLa respuesta de Giles debería tener el indicador -l agregado al ejecutar bash, de modo que cualquier script de perfil de inicio de sesión se obtenga en el nuevo shell de bash. (Por ejemplo, cualquier cosa en /etc/profile.d/ en RHEL). El guión debería ser:
fuente
-lopción? He usado esto durante meses sin problemas sin problemas.Una respuesta para
csh/tcshinspirado por el más votado por @Gilles esfuente
Solaris:
fuente