Der Unix-Systemadministrator, an dem ich arbeite, zögert, mir Zugriff zu gewähren, um meine Login-Shell von ksh
zu ändern zu bash
. Er hat verschiedene Ausreden vorgebracht, die lustigste war, dass sie alle ihre Skripte für ksh
schreiben Sie funktionieren nicht, wenn ich versuche, sie auszuführen. Ich weiß nicht, woher er diese Ideen hat, aber da ich ihn nicht überzeugen kann, gibt es eine Alternative, die ich habe?
(chsh
ist auf diesen Computern installiert, aber wir verwenden öffentliche/private Schlüsselpaare für die Anmeldung, und ich habe kein Passwort, also wenn chsh
fordert mich zur Eingabe eines Passworts auf, das ich ihm nicht geben kann. )
Akzeptierte Antwort:
Wenn Sie sich anmelden, wird die Datei ~/.profile
wird von der Login-Shell gelesen (ksh für Sie). Sie können diese Login-Shell anweisen, sich selbst durch bash zu ersetzen. Sie sollten einige Vorsichtsmaßnahmen treffen:
- Ersetzen Sie die Login-Shell nur, wenn sie interaktiv ist. Dies ist wichtig:Andernfalls funktioniert die Anmeldung im Grafikmodus möglicherweise nicht (dies ist systemabhängig:einige, aber nicht alle Systeme lesen
~/.profile
beim Einloggen über xdm oder ähnliches) und Redewendungen wiessh foo '. ~/.profile; mycommand'
wird scheitern. - Überprüfen Sie, ob bash verfügbar ist, damit Sie sich trotzdem anmelden können, wenn die ausführbare Datei aus irgendeinem Grund nicht vorhanden ist.
Sie haben die Wahl, ob Sie bash als Login-Shell ausführen möchten oder nicht. Der einzige große Unterschied darin, es zu einer Login-Shell zu machen, besteht darin, dass es ~/.bash_profile
lädt oder ~/.profile
. Wenn Sie also bash als Login-Shell ausführen, achten Sie darauf, ein ~/.bash_profile
zu haben oder achten Sie darauf, bash nicht rekursiv von ~/.profile
auszuführen . ~/.profile
hat keinen wirklichen Vorteil eher von bash als von ksh ausgeführt, daher würde ich empfehlen, es nicht zu tun.
Stellen Sie auch die SHELL
ein Umgebungsvariable in Bash, sodass Programme wie Terminalemulatoren diese Shell aufrufen.
Hier ist der Code, um zu Bash zu wechseln. Fügen Sie es am Ende von ~/.profile
ein .
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