Le Sysadmin Unix où je travaille est réticent à me donner accès à la modification de mon shell de connexion de ksh
à bash
. Il a donné diverses excuses, l'être le plus drôle que puisqu'ils écrivent tous leurs scripts pour ksh
ils ne fonctionneront pas si j'essaie de les exécuter. Je ne sais pas où il reçoit ces idées, mais comme je ne peux pas le convaincre, y a-t-il une alternative que j'ai?
(chsh
est installé sur ces machines, mais nous utilisons des claviers publics/privés pour vous connecter, et je n'ai aucun mot de passe, alors quand chsh
vous invite à un mot de passe que je n'ai rien à faire donne-le. )
Lorsque vous vous connectez, le fichier ~/.profile
est lu par la coque de connexion (ksh pour vous). Vous pouvez demander à ce que la coquille de connexion se remplace par Bash. Vous devriez prendre des précautions:
~/.profile
Lors de la connexion via XDM ou similaire) et des idiomes tels que ssh foo '. ~/.profile; mycommand'
va échouer.Vous avez le choix d'exécuter Bash comme coquille de connexion ou non. La seule différence majeure dans la fabrication d'un shell de connexion est que cela chargera ~/.bash_profile
ou ~/.profile
. Donc, si vous exécutez BASH comme Connexion Shell, faites attention à avoir un ~/.bash_profile
ou veillez à ne pas exécuter de bash récursivement de ~/.profile
. Il n'y a pas d'avantage réel d'avoir ~/.profile
exécuté par bash plutôt que ksh, alors je recommanderais de ne pas le faire.
Définissez également la variable d'environnement Shell
à baster, de sorte que des programmes tels que des émulateurs de terminaux invoquent ce shell.
Voici le code pour passer à Bash. Mettez-le à la fin 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
C'est légèrement krudgey, mais vous pouvez causer bash
comme la coque que vous utilisez lors de la connexion en créant un .profile
Fichier dans votre répertoire personnel contenant
Shell=`type -P bash`
exec bash -l
Cela provoquera la remplacement de la session ksh
par une session bash
. Vous n'aurez pas à taper exit
(ou ^D
) deux fois, comme vous le feriez si vous avez démarré manuellement une nouvelle session bash
à chaque fois que vous avez connecté. Et en tapant
echo $Shell
retournera même le chemin de bash
.
La réponse de Giles devrait avoir le drapeau -L ajouté ajouté lors de l'exécution de bash, de sorte que les scripts de profil de connexion seront provenus dans la nouvelle coque Bash. (Par exemple, tout ce qui est dans /etc/profile.d/ sur RHEL). Le script devrait alors être:
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" -l
fi
fi
esac
Une réponse pour csh/tcsh
inspiré du top voté un par @gilles est
if ( ! $?BASH ) then
setenv BASH `command -v bash`
endif
if ( $?prompt ) then
if ( -x "$BASH" ) then
exec "$BASH"
endif
endif
Solaris:
usermod -s /bin/bash root