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

40608
Alex

Auf einem meiner Server lautet die Aufforderung [Benutzer @ Hostpfad] ... und ich kann tatsächlich "Tab" drücken, um den Pfad automatisch auszufüllen.

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

12
Sie können immer "pwd" eingeben, um den Namen des aktuellen Arbeitsverzeichnisses zu drucken. Und sagen Sie, dass Tab-Completion ebenfalls nicht funktioniert? (Auf einigen Maschinen, die ich verwende, erhalte ich diese kurze Aufforderung nur, wenn ich mich als root anmelde, und ich lasse dies gerne als nette Warnung an. Wie selten muss man sich als root anmelden: Sie verwenden root nicht , bist du?) Arjan vor 14 Jahren 1
Alex, kannst du uns sagen, welche Distribution du benutzt? invert vor 14 Jahren 0
Ich benutze Ubuntu. Alex vor 14 Jahren 0
Das neueste Ubuntu? Und sagen Sie, dass Tab-Completion ebenfalls nicht funktioniert? Arjan vor 14 Jahren 0
Sie scheinen zwei Fragen zu stellen: Warum füllt die Registerkarte den Pfad nicht automatisch aus und warum ist die Aufforderung nur ein Dollarzeichen anstelle von [Benutzer @ Hostpfad]. Es ist ein bisschen schwierig, für Antworten zu stimmen, da keiner der beiden Antworten gibt. Joseph Holsten vor 14 Jahren 0

4 Antworten auf die Frage

21
Joseph Holsten

Da Sie zwei Fragen stellen, werde ich beide beantworten.

Warum werden auf der Registerkarte für das automatische Vervollständigen von Dateipfaden keine Pfade angezeigt?

Weil Ihre Shell diese Option nicht unterstützt oder die Tab-Vervollständigung nicht aktiviert ist.

Um dieses Problem zu beheben, müssen Sie zunächst herausfinden, was Ihre Shell ist. Laufen Sie auf der Maschine, deren Hülle Sie mögen

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 zunächst sicher, dass die gewünschte Shell auf dem Computer vorhanden ist. Da sich die Shell auf dem Ubuntu-Computer möglicherweise nicht am selben Ort befindet wie der andere, überprüfen Sie den Speicherort durch Eingabe

 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, sagen Sie which tcsh, which zshoder ähnliches.

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 durch Ausführen ändern

chsh -s /bin/bash 

durch einen /bin/bashbeliebigen Pfad ersetzen, der für Ihre gewünschte Shell geeignet ist.

Warum ist die Aufforderung ein Dollarzeichen anstelle von [Benutzer @ Hostpfad]?

Aufgrund Ihres prompt Umgebungsvariablen $PS1, $PS2und so weiter. Diese Dinge sind normalerweise nicht zwischen Shells portierbar, daher hier ein paar Links für mögliche Kandidaten:

bashenthält ein umfangreiches Handbuch mit Seiten zu Bash-Variablen (einschließlich PS1& c) und zum Drucken einer Eingabeaufforderung (die PROMPT_COMMANDden langen Namen für beschreibt PS1). Fügen Sie folgende Zeile hinzu~/.bashrc

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

tcshhat ein Online-Handbuch (nur seine Manpage) mit einem Abschnitt zu den Umgebungsvariablen der Eingabeaufforderung . Fügen Sie folgende Zeile hinzu~/.tcshrc

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

zshenthält eine Bedienungsanleitung mit einer einfachen Anleitung zu Eingabeaufforderungen sowie eine Anleitung mit einer ausführlichen Referenz zu Prompt Expansion . Fügen Sie folgende Zeile hinzu~/.zshrc

export PS1='[%n@%m %~] ' 
6
DigitalRoss

Bash ist nicht die einzige Schale.

Ihr Problem könnte eine einfache Sache sein, wenn Sie kein .profile oder .bashrc haben, das PS1 festlegt, oder dass Ihre Login-Shell überhaupt keine Bash ist.

Bash verwendet gnu readlinezum Beispiel die Tab-Vervollständigung. 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 antwortet auf --version. Auf vielen Linux-Systemen /bin/shist eigentlich keine bash, sondern meistens eine verkrüppelte Version von ash.

nicht "Strich" statt "Asche"? Ich dachte, ich habe so etwas gelesen knittl vor 14 Jahren 1
+1 für kein .profile oder .bashrc - Wenn Alex bei der Installation von Ubuntu kein Konto eingerichtet hat, haben neue Benutzer standardmäßig keine .bashrc / ohne PS1. Cory Plastek vor 14 Jahren 2
4
knittl

Ich schätze, Sie verwenden nicht bash, aber sh und Ihre Eingabeaufforderung ist nicht richtig eingestellt (wenn dies überhaupt möglich ist)

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

wenn du bash starten willst, tippe einfach bash

Sie können die Eingabeaufforderung mit anderen Shells festlegen. Es gibt keine Shell namens "sh". Echoing `$ SHELL` druckt eine Umgebungsvariable namens` SHELL`. Diese Umgebungsvariable zeigt einfach auf die Shell und wird nur von bash gesetzt. Es ist nahezu nutzlos, um festzustellen, welche Shell gerade läuft, da dies nur schwach darauf hindeutet, dass einige übergeordnete Elemente des aktuellen Prozesses bash gewesen sein könnten. DigitalRoss vor 14 Jahren 0
Nun, der Programmname der Shell ist sh (in / bin / sh). und ja, echo $ SHELL druckt die normalerweise gesetzte Variable SHELL. knittl vor 14 Jahren 0
Jedes Unix-System hat eine ausführbare Datei namens `/ bin / sh`, ja. Aber ich kenne keine Schale, deren Name "sh" lautet. Ich kann an "ash", "ksh", "csh", "bash", "zsh" und "tcsh" denken. Das erste ist das übliche / bin / sh unter Linux und NetBSD, das letzte ist die gewöhnliche FreeBSD-Shell und die anderen sind optionale Shells. In vielen Desktop-Umgebungen wird die Login-Shell der Benutzer in bash geändert, während / bin / sh als Asche verbleibt. DigitalRoss vor 14 Jahren 0
@DigitalRoss `sh` ist die Bourne-Shell. http://en.wikipedia.org/wiki/Bourne_shell Einige Systeme (Solaris) enthalten noch eine Version der Bourne-Shell, die nicht nur eine Kopie einer der Re-Implementierungen ist (ash, dash, bash, ksh, zsh). . Chris Johnsen vor 14 Jahren 2
... und bash ist als "Bourne again shell" bekannt, die einige Features von Bourne Shell, csh und ksh geerbt hat. invert vor 14 Jahren 0
Seufz, ja, die fast schon vergessene Bourne-Muschel heißt "sh". Aber in dem Gespräch geht es um den Hinweis dieser Antwort auf "sh", und ist es nicht sehr wahrscheinlich, dass er wirklich "Asche" ist? DigitalRoss vor 14 Jahren 0
Oh, und jetzt, da wir wissen, dass es Ubuntu ist, ist es wie eine hundertprozentige Gewissheit, dass sich diese Antwort auf "Asche" bezog. DigitalRoss vor 14 Jahren 0
2
Palantir

Sie müssen eine Variable namens PS1 in einem Ihrer Anmeldeskripts festlegen, beispielsweise / etc / profile oder ~ / .bashrc. Das hängt von Ihrer Verteilung ab.

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

nicht unbedingt .bashrc, da er möglicherweise eine andere Shell als bash verwendet knittl vor 14 Jahren 0