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:
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
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.
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
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.
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?)Antworten:
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
Sie können die gemeinsame sehen
/bin/bash
, oder etwas weniger häufig wie/bin/tcsh
,/bin/zsh
oder 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
Dies wird Ihnen den Pfad der Shell Sie wollen, so etwas wie
/bin/bash
,/usr/bin/bash
oder/usr/local/bin/bash
. Natürlich, wenn Sie eine Shell anders als bash wollen, werden Sie sagenwhich tcsh
,which zsh
oder ähnlich.Wenn Sie keinen Pfad sehen, sondern stattdessen
bash not found
, müssen Sie das entsprechende Paket installieren und erneut verwendenwhich
, 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
Ersetzen
/bin/bash
durch 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
,$PS2
und so weiter. Diese Dinge sind normalerweise nicht zwischen Shells übertragbar. Hier sind einige Links für mögliche Kandidaten:bash
verfügt über ein umfangreiches Handbuch mit Seiten zu Bash-Variablen (einschließlichPS1
& c) und zum Drucken einer Eingabeaufforderung (die den LangnamenPROMPT_COMMAND
für beschreibtPS1
). Fügen Sie die folgende Zeile zu Ihrer hinzu~/.bashrc
tcsh
verfü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
zsh
verfü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
quelle
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 readline
zum 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 sh
undman 3 readline
. Bash reagiert auf--version
. Auf vielen Linux-Systemen/bin/sh
ist Bash eigentlich keine, sondern meist eine verkrüppelte Version vonash
.quelle
dash
stattash
? Ich dachte, ich lese so etwasIch 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
quelle
sh
. Durch Echo$SHELL
wird eine aufgerufene Umgebungsvariable gedrucktSHELL
. 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./bin/sh
yes. Aber ich kenne keine Muschel, deren Name istsh
. Ich kann michash
,ksh
,csh
,bash
,zsh
, undtcsh
. 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.sh
ist 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).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
quelle