Wie ändere ich meine Standard-Shell in Bash, wenn ich keinen Zugriff auf chsh oder / etc / passwd habe?

8

Ich arbeite an einem Remote-Linux-Konto der Universität, und die Standard-Shell ist leider cshohne Tab-Vervollständigung. Wie kann ich die Standard-Shell meines Kontos ändern bash? chshist nicht verfügbar.

mcandre
quelle
1
Welches System verwendet die Universität zum Speichern von Konten? ldapmodifykönnte funktionieren.
user1686
Oder, wenn sie NIS verwenden, ypchshsollte der richtige Befehl sein.
M000
Wenn Sie nur die Registerkarte vervollständigen möchten, können Sie diese zu Ihrem ~ / .cshrc set filecund hinzufügen set autolist.
Hennes

Antworten:

11

Sie sollten wahrscheinlich versuchen, Ihre Systemadministratoren zu fragen, ob sie Ihre Standard-Shell für Sie ändern können. Wenn sie nicht können oder wollen (wie es der Fall war, als ich auf dem College war), war die Problemumgehung, die ich verwendet habe, das Hinzufügen

# Exec bash if using an interactive shell.
if ($?prompt) then
    setenv SHELL /path/to/bash
    exec $SHELL
endif

zu .cshrc. (Stellen Sie sicher, dass Sie /path/to/basheinen echten Pfad verwenden. Dies kann sogar eine Version sein bash, die sich in Ihrem Home-Verzeichnis befindet, wenn die vom System bereitgestellte Version für Ihren Geschmack zu veraltet ist.) Aus Effizienzgründen ist dies am besten Dies so früh .cshrcwie möglich zu tun , damit Sie keine zusätzliche .cshrcVerarbeitung vermeiden , die nach dem Ersetzen bashdes cshProzesses in Frage kommt .

jjlin
quelle
Das hat bei mir an meiner Universität nicht funktioniert. Ich werde wahrscheinlich mit dem Systemadministrator sprechen müssen.
2rs2ts
3

Sie könnten einfach mit verbinden

ssh -t yourhost bash

um die Bash-Shell automatisch auszuführen, wenn Sie sich anmelden.


In den Kommentaren unten können Sie die Alternative sehen

ssh -t yourhost exec bash

execführt einen neuen Prozess aus und beendet den alten, sodass der cshProzess direkt beendet wird.

Wenn -lam Ende des Befehls ein Argument an Bash angehängt wird, wird es als Anmeldeshell behandelt, aber möglicherweise wird dies nicht benötigt.

Daniel Andersson
quelle
1
ssh -t yourhost exec -a bash -l bashum die ursprüngliche Shell vollständig zu ersetzen, anstatt als Prozess innerhalb der ursprünglichen Shell ausgeführt zu werden.
Chepper
@chepner: Interessant, ich benutze selbst eine einfache ssh -t host bashLösung in einer ähnlichen Situation, aber dein Weg ist besser. Ich habe überhaupt nicht daran gedacht exec, danke! Ich werde den Beitrag mit Ihrem Vorschlag aktualisieren.
Daniel Andersson
Ich hatte allerdings ein wenig Lust, Argumente für den basheingebauten Befehl zu verwenden exec.
Chepper
@chepner: Ah ja, ich habe es jetzt auf einem Host mit zsh als Standard-Shell versucht und es schlägt auf beiden -aund fehl -l. Ich werde das Beispiel in meiner Antwort ändern.
Daniel Andersson
0

Die beste Lösung, die ich gefunden habe, war eine über Stackexchange. Hier ist der Link- Stack-Austausch und hier ist die Lösung:

Erstellen Sie eine .profile-Datei in Ihrem Home-Verzeichnis und fügen Sie Folgendes ein oder fügen Sie sie am Ende Ihres .profile hinzu, falls Sie bereits eine haben.

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
MattC
quelle
0

Ich habe viel gesucht, wenn Sie die LADP-Authentifizierung über PAM verwenden. Ich denke, die beste Lösung besteht darin, SHELL = / bin / bash exec / bin / bash in die Profildatei in Ihrem Benutzer-Ausgangsverzeichnis aufzunehmen

user454581
quelle