Wenn Sie sich einloggen, wird die Datei ~/.profile
von der Login-Shell (ksh für Sie) gelesen. Sie können diese Anmeldeshell anweisen, sich selbst durch Bash zu ersetzen. Sie sollten einige Vorsichtsmaßnahmen treffen:
- Ersetzen Sie die Anmeldeshell 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, die
~/.profile
beim Anmelden über xdm oder ähnliches gelesen werden ), und Redewendungen wie schlagen ssh foo '. ~/.profile; mycommand'
fehl.
- Stellen Sie sicher, dass 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 bei der Erstellung einer Login-Shell ist, dass sie geladen wird ~/.bash_profile
oder ~/.profile
. Wenn Sie also bash als Login-Shell ~/.bash_profile
ausführen , achten Sie darauf, dass a nicht rekursiv ausgeführt wird ~/.profile
. Es gibt keinen wirklichen Vorteil, ~/.profile
durch Bash statt durch Ksh ausgeführt zu werden, daher würde ich empfehlen, dies nicht zu tun.
Setzen Sie außerdem die SHELL
Umgebungsvariable auf bash, damit Programme wie Terminalemulatoren diese Shell aufrufen.
Hier ist der Code, um zu bash zu wechseln. Setzen Sie es am Ende von ~/.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 - hör auf böse zu sein'
quelle
.profile
Funktioniert nur für Login-Shell (als OP nötig). Ich benutze die Remotedesktopverbindung von Windows 10, um mich auf einer Linux-Workstation anzumelden, und öffne dann Terminal in gnome. Ich will,zsh
während mein Sysadmin mir gibtbash
. In diesem Fall muss ich das Snippet.bashrc
anstelle von hinzufügen.profile
.Dies ist ein wenig klug, aber Sie können dazu führen
bash
, dass Sie die Shell verwenden, wenn Sie sich anmelden, indem Sie eine.profile
Datei in Ihrem Home-Verzeichnis erstellen, die Folgendes enthältDadurch wird die
ksh
Sitzung durch einebash
Sitzung ersetzt. Sie müssen nicht zweimalexit
(oder^D
)bash
eingeben , wie Sie es tun würden, wenn Sie jedes Mal, wenn Sie sich anmelden, manuell eine neue Sitzung starten würdenwird sogar den Pfad zurückgeben zu
bash
.quelle
exec bash -l
.type
wird über empfohlenwhich
.bash
auch gelesen,.profile
wodurch eine Endlosschleife erzeugt wird? Ich bin damit einverstanden, dass etwas in etwa dasexec bash
ist, was Sie wollen, aber Sie müssen sicherstellen, dass Sie es nur bei Ihrem Login tun, ksh, so dass einige if-Anweisungen erforderlich sind!~/.bash_profile
oder~/.bash_login
Bei der Antwort von Giles sollte das Flag -l hinzugefügt werden, wenn Bash ausgeführt wird, damit alle Anmeldeprofilskripte in der neuen Bash-Shell abgelegt werden. (Zum Beispiel alles in /etc/profile.d/ auf RHEL). Das Skript sollte dann sein:
quelle
-l
Option hinzufügen ? Ich benutze dies seit Monaten ohne es ohne Probleme.Eine Antwort für
csh/tcsh
inspiriert von der Top-Bewertung von @Gilles istquelle
Solaris:
quelle