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.
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 .
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"fifiesac
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
ldapmodify
könnte funktionieren.ypchsh
sollte der richtige Befehl sein.set filec
und hinzufügenset autolist
.Antworten:
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
zu
.cshrc
. (Stellen Sie sicher, dass Sie/path/to/bash
einen echten Pfad verwenden. Dies kann sogar eine Version seinbash
, 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.cshrc
wie möglich zu tun , damit Sie keine zusätzliche.cshrc
Verarbeitung vermeiden , die nach dem Ersetzenbash
descsh
Prozesses in Frage kommt .quelle
Sie könnten einfach mit verbinden
um die Bash-Shell automatisch auszuführen, wenn Sie sich anmelden.
In den Kommentaren unten können Sie die Alternative sehen
exec
führt einen neuen Prozess aus und beendet den alten, sodass dercsh
Prozess direkt beendet wird.Wenn
-l
am Ende des Befehls ein Argument an Bash angehängt wird, wird es als Anmeldeshell behandelt, aber möglicherweise wird dies nicht benötigt.quelle
ssh -t yourhost exec -a bash -l bash
um die ursprüngliche Shell vollständig zu ersetzen, anstatt als Prozess innerhalb der ursprünglichen Shell ausgeführt zu werden.ssh -t host bash
Lösung in einer ähnlichen Situation, aber dein Weg ist besser. Ich habe überhaupt nicht daran gedachtexec
, danke! Ich werde den Beitrag mit Ihrem Vorschlag aktualisieren.bash
eingebauten Befehl zu verwendenexec
.-a
und fehl-l
. Ich werde das Beispiel in meiner Antwort ändern.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.
quelle
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
quelle