Wie wechsle ich von einer unbekannten Shell zu Bash?


41

Ich war überrascht, dass ich diese Frage nicht bereits auf der Website gefunden habe. Also kam heute $nach dem ich mich als neuer Benutzer angemeldet habe. Dies war unerwartet, da die Eingabeaufforderung meines Hauptbenutzers mit beginnt username@computername:~$.

Wie wechsle ich von dieser anderen Shell zu Bash?


8
Nur weil $kam eher als username@computername:~$nicht bedeutet es nicht , bash ist. Die genaue Formatierung der Eingabeaufforderung wird durch die PS1-Variable festgelegt, die für verschiedene Benutzer unterschiedlich eingerichtet oder angepasst werden kann.
Frabjous

3
@mouche Re: @frabjous echo $SHELL, um herauszufinden, was Ihre aktuelle Shell ist.
Xenoterracide

1
@mouche @frabjous und das Beginnen mit einem $ ist eigentlich üblich für Bash, einige Nicht-Bash-Shells wie zsh verwenden das% out of the box, ich glaube, andere Shells verwenden andere Dinge.
Xenoterracide

1
@mouche zu sein bedeutet /bin/shoft nicht viel, was normalerweise ein Symlink zu etwas anderem ist. Ich würde schreiben, um ls -l /bin/shzu sehen, worauf es ankommt. In einigen Fällen, in denen ein Symlink zu etwas vorhanden ist, ändert sich sein Verhalten. Ich denke nicht, dass Bash so ist.
Xenoterracide

3
@xenoterracide - Mit bashas werden viele Bash-Funktionen /bin/sh deaktiviert (es wird in den POSIX-Kompatibilitätsmodus versetzt).
Chris Down

Antworten:


61

Angenommen, die unbekannte Shell unterstützt die Ausführung eines absoluten Befehls, könnten Sie versuchen: /bin/bash

Um die Standard-Shell zu ändern, würde ich verwenden chsh(1). Beispielnutzung:chsh -s /bin/bash $USER


1
Ändert chsh die Shell permanent oder nur für die aktuelle Sitzung?
Mouche

10
@mouche Permanent; es ändert sich dein Eintrag in/etc/passwd
Michael Mrozek

Bei @mouche kann chsh(1)nur zu einer Shell gewechselt werden, die in aufgeführt ist /etc/shells(und vermutlich verfügbar ist). chsh -llistet die Alternativen auf. Seien Sie vorsichtig, einige (wie nologin) sind für Konten definiert, die niemals zum Anmelden verwendet werden sollten (eine gute Möglichkeit, sich auszusperren). Es kann lokale Ergänzungen für spezielle Zwecke geben.
Vonbrand

19

Sie tippen ein bash. Wenn dies dauerhaft sein soll, ändern Sie die Standard-Shell /bin/bashdurch Bearbeiten in /etc/passwd.

Hier sind einige Auszüge aus meinem /etc/passwd:

avahi:x:84:84:Avahi daemon:/:/bin/false
xenoterracide:x:1000:100::/home/xenoterracide:/bin/zsh
postgres:x:88:88::/var/lib/postgres:/bin/zsh
bob:x:1001:1001::/home/bob:/bin/bash
usbmux:x:140:140:usbmux user:/:/sbin/nologin

Das allerletzte Feld enthält die Shell. Das Ändern des Felds nach dem letzten :in eine gültige oder ungültige Shell funktioniert. /bin/falseund /sbin/nologinbeide bedeuten, dass der Benutzer keine echte Anmeldeshell hat, obwohl wenn pam nicht richtig eingerichtet ist, dies nicht bedeutet, dass er sich nicht anmelden kann (ich habe einen Fehler in Arch Linux gemeldet, weil Sie sich grafisch anmelden können, ohne dies zu müssen eine Login-Shell). /bin/bashund /bin/zshsind beide gültige Shells. /etc/shellsEine Liste der gültigen Shells auf Ihren Systemen finden Sie unter. Hier ist meine, /etc/shellswenn Sie interessiert sind.

/bin/sh
/bin/bash
/bin/ksh
/bin/zsh
/bin/dash

Ja, Sie können chshoder verwenden usermod, um die gleichen Aktionen auszuführen. Denken Sie daran, dass dies nur strukturierte Textdateien und TIMTOWTDI sind.


11
Sie möchten wahrscheinlich verwenden, chshanstatt manuell zu bearbeitenpasswd
Michael Mrozek

@Michael Es gibt ungefähr 5 (POOMA) verschiedene Möglichkeiten, die Shell zu ändern. /etc/passwdIch hatte keine Lust, eine davon aufzulisten, da ich es immer manuell mache. chsh und usermod können es beide.
Xenoterracide

Das Herumspielen mit Konfigurationsdateien ist eine schlechte Idee (TM). Ein Fehler kann das System unbrauchbar machen. Ja, es ist oft der einzige / schnellste Weg, aber dann mache es mit äußerster Sorgfalt .
Vonbrand

12

Wenn chsh oder die manuelle Bearbeitung der Konfiguration nicht funktionieren, aber beim Anmelden ein ~ / .profile-Skript ausgeführt wird, fügen Sie diese Zeile hinzu:

exec /bin/bash --login

Nachdem ich mich eine Weile umgesehen hatte, war dies die Lösung, die ich brauchte. Vielen Dank!
PearsonArtPhoto

Großartige Idee, besonders wenn die Shell Quellen auswählte, die beim Start gespeichert wurden ...
vonbrand

touch ~/.bash_profileAndernfalls wird bash in einer Schleife ausgeführt: bash nimmt den ~/.profileFall auf, ~/.bash_profiledass er nicht existiert.
har-wradim
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.