Warum zeigt meine Linux-Eingabeaufforderung ein $ anstelle des Anmeldenamens und des Pfads an?

13

Auf einem meiner Server lautet die Eingabeaufforderung [user @ host path] ... und ich kann "tab" drücken, um den Pfad automatisch zu füllen.

Aber auf meinem neuen Ubuntu-Server ist es nur ein Dollarzeichen?

Alex
quelle
1
Sie können immer eingeben pwd, um den Namen des aktuellen Arbeitsverzeichnisses zu drucken. Und sagen Sie, dass die Tab-Vervollständigung auch nicht funktioniert? (Auf einigen Computern, die ich verwende, erhalte ich diese kurze Eingabeaufforderung nur, wenn ich mich als root anmelde, und ich lasse das gerne als Warnung an Ort und Stelle. Wenn überhaupt, muss man sich selten als root anmelden: Sie verwenden kein root sind Sie?)
Arjan
Alex, kannst du uns sagen, welche Distribution du verwendest?
Invertzucker
Ich benutze Ubuntu.
Alex
Das neueste Ubuntu? Und sagen Sie, dass die Tab-Vervollständigung auch nicht funktioniert?
Arjan
Sie scheinen zwei Fragen zu stellen: Warum füllt der Tabulator den Pfad nicht automatisch aus und warum ist die Eingabeaufforderung nur ein Dollarzeichen anstelle von [user @ host path]. Es ist ein wenig schwierig, für Antworten zu stimmen, da beide nicht beantwortet werden.
Joseph Holsten

Antworten:

27

Da Sie zwei Fragen stellen, beantworte ich beide.

Warum werden Dateipfade nicht automatisch vervollständigt?

Weil Sie die Shell entweder nicht unterstützen oder die Tab-Vervollständigung nicht aktiviert ist.

Um dies zu beheben, müssen Sie zuerst herausfinden, was Ihre Shell ist. Laufen Sie auf der Maschine, deren Shell Ihnen gefällt

echo $SHELL

Sie können die gemeinsame sehen /bin/bash, oder etwas weniger häufig wie /bin/tcsh, /bin/zshoder etwas ganz anderes.

Jetzt können Sie Ihre Shell auf dem Ubuntu-Rechner ändern. Stellen Sie auf diesem Computer zunächst sicher, dass die gewünschte Shell vorhanden ist. Da sich die Shell möglicherweise nicht am selben Ort auf dem Ubuntu-Computer wie auf dem anderen befindet, überprüfen Sie den Ort, indem Sie Folgendes eingeben

 which bash

Dies wird Ihnen den Pfad der Shell Sie wollen, so etwas wie /bin/bash, /usr/bin/bashoder /usr/local/bin/bash. Natürlich, wenn Sie eine Shell anders als bash wollen, werden Sie sagen which tcsh, which zshoder ähnlich.

Wenn Sie keinen Pfad sehen, sondern stattdessen bash not found, müssen Sie das entsprechende Paket installieren und erneut verwenden which, um herauszufinden, wo die Shell installiert wurde.

Mit dem Pfad der von Ihnen gewählten Shell können Sie schließlich Ihre Shell ändern, indem Sie ausführen

chsh -s /bin/bash

Ersetzen /bin/bashdurch was auch immer der geeignete Pfad für Ihre Shell der Wahl ist.

Warum ist die Eingabeaufforderung ein Dollarzeichen anstelle von [user @ host path]?

Aufgrund Ihres prompt Umgebungsvariablen $PS1, $PS2und so weiter. Diese Dinge sind normalerweise nicht zwischen Shells übertragbar. Hier sind einige Links für mögliche Kandidaten:

bashverfügt über ein umfangreiches Handbuch mit Seiten zu Bash-Variablen (einschließlich PS1& c) und zum Drucken einer Eingabeaufforderung (die den LangnamenPROMPT_COMMAND für beschreibt PS1). Fügen Sie die folgende Zeile zu Ihrer hinzu~/.bashrc

export PS1='[\u@\h \w] '

tcshverfügt über ein Online-Handbuch (nur die Manpage) mit einem Abschnitt zu den Umgebungsvariablen für Eingabeaufforderungen . Fügen Sie die folgende Zeile zu Ihrer hinzu~/.tcshrc

set prompt='[%n@%m %~] '

zshverfügt über ein Benutzerhandbuch mit einer einfachen Anleitung zu Eingabeaufforderungen sowie ein Handbuch mit einer sehr detaillierten Referenz zu Prompt Expansion . Fügen Sie die folgende Zeile zu Ihrer hinzu~/.zshrc

export PS1='[%n@%m %~] '
Joseph Holsten
quelle
6

Bash ist nicht die einzige Hülle.

Ihr Problem kann darin bestehen, dass Sie kein .profile oder .bashrc haben, mit dem PS1 festgelegt wird, oder dass Ihre Anmeldeshell überhaupt nicht bash ist.

Bash wird beispielsweise gnu readlinezum Vervollständigen von Registerkarten verwendet. Dies ist ein kompliziertes Thema und readline hat sogar eine eigene Konfigurationsdatei für jeden Benutzer.

Siehe man bash, man shund man 3 readline. Bash reagiert auf --version. Auf vielen Linux-Systemen /bin/shist Bash eigentlich keine, sondern meist eine verkrüppelte Version von ash.

DigitalRoss
quelle
1
nicht dashstatt ash? Ich dachte, ich lese so etwas
Knittl
2
+1 für das Fehlen eines .profile oder .bashrc - wenn Alex sein Konto bei der Installation von Ubuntu nicht zum ersten Mal eingerichtet hat, haben neue Benutzer standardmäßig kein .bashrc / keine PS1.
Cory Plastek
4

Ich denke, Sie verwenden nicht bash, sondern sh und Ihre Eingabeaufforderung ist nicht richtig eingestellt (falls dies mit sh überhaupt möglich ist).

Sie können Ihre aktuelle Shell abrufen, indem Sie Folgendes eingeben: echo $SHELL

Wenn Sie Bash starten möchten, geben Sie einfach bash

stricken
quelle
Sie können die Eingabeaufforderung mit anderen Shells festlegen. Es wird keine Shell aufgerufen sh. Durch Echo $SHELLwird eine aufgerufene Umgebungsvariable gedruckt SHELL. Diese Umgebungsvariable zeigt einfach auf die Shell und wird nur durch Bash gesetzt. Es ist nahezu nutzlos festzustellen, welche Shell ausgeführt wird, da dies nur schwach darauf hinweist, dass einige übergeordnete Elemente des aktuellen Prozesses möglicherweise bash waren.
DigitalRoss
Nun, der Programmname der Shell ist sh (in / bin / sh). und ja, echo $ SHELL gibt die normalerweise gesetzte Variable SHELL aus.
Knittl
Jedes Unix-System hat eine ausführbare Datei namens /bin/shyes. Aber ich kenne keine Muschel, deren Name ist sh. Ich kann mich ash, ksh, csh, bash, zsh, und tcsh. Das erste ist das übliche / bin / sh unter Linux und NetBSD, das letzte ist die übliche FreeBSD-Shell und die anderen sind optionale Shells. In vielen Desktop-Umgebungen wird die Anmeldeshell des Benutzers auf bash geändert, während / bin / sh als ash belassen wird.
DigitalRoss
2
@DigitalRoss shist die Bourne-Shell. en.wikipedia.org/wiki/Bourne_shell Einige Systeme (Solaris) verfügen noch über eine Version der Bourne-Shell, die nicht nur eine Kopie einer der Neuimplementierungen ist (ash, dash, bash, ksh, zsh).
Chris Johnsen
... und bash ist als "Bourne again shell" bekannt, die einige Funktionen von Bourne shell, csh und ksh übernommen hat.
Invertzucker
2

Sie müssen eine Variable mit dem Namen PS1 in einem Ihrer Anmeldeskripts festlegen, z. B. / etc / profile oder ~ / .bashrc. Dies hängt von Ihrer Distribution ab.

Beispiel: http://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.html

Palantir
quelle
nicht unbedingt .bashrc, da er möglicherweise eine andere Shell verwendet als bash
knittl 10.11.09