TAB-Autovervollständigung in Bourne Shell

7

Ich weiß nicht, wie ich den TAB-Schlüssel dazu bringen soll, Dateinamen, Befehle oder irgendetwas automatisch zu vervollständigen.

Ich arbeite auf einem Unix-ähnlichen System (OS / 390) und bin auf mehrere Skripte angewiesen, die in sh (Bourne-Shell, nicht BASH), aber nicht in anderen Shells (z. B. tcsh) funktionieren, sodass ich die Shells nicht wechseln kann . Normalerweise verbinde ich mich über ssh oder telnet über das GNOME-Terminal von Ubuntu, auf dem bash lokal ausgeführt wird, mit diesem System. Andere Personen stellen über Telnet über die Windows XP-Eingabeaufforderung eine Verbindung zum OS / 390-System her und können nach Ausgabe von "set -o emacs" automatisch mit der TAB-Taste vervollständigen. Wenn ich "set -o emacs" ausstelle, erhalte ich einige der entsprechenden Funktionen (z. B. Strg-p, um den Verlauf rückwärts zu durchlaufen), jedoch nicht automatisch.

Mir ist die Option "set -o vi" bekannt, aber die Verwendung von "ESC- *" usw. spricht mich nicht an, da ich weiß, dass die einfache TAB-Taste für andere Personen funktioniert.

Gibt es etwas an Ubuntu, dem GNOME-Terminal, Bash oder SSH, das ein anderes Tabulatorzeichen sendet als eine Windows XP-Eingabeaufforderung, auf der Telnet ausgeführt wird?

Hat jemand eine Idee, warum ich möglicherweise nicht in der Lage bin, die Registerkarte für die automatische Vervollständigung zu aktivieren, während Personen auf demselben Remotecomputer, auf denen dieselbe Shell ausgeführt wird, dies können?

Was ist zu tun, um die automatische Vervollständigung der Registerkarte zu aktivieren ?

Thomas G Henry
quelle

Antworten:

5

(Keine Antwort auf Ihre genaue Frage, aber viele Problemumgehungen.)

Sie müssen Ihre Scripting-Shell nicht mit Ihrer interaktiven Shell abgleichen. (Zum Beispiel schreiben die meisten (t) csh- oder zsh-Benutzer sh-Skripte). Wenn Sie eine bessere interaktive Shell als die Bourne-Shell (zsh, bash, tcsh) haben oder installieren können, entscheiden Sie sich dafür. Selbst wenn Sie dies nicht können, prüfen Sie, ob es ein ksh gibt, das wahrscheinlich etwas bessere interaktive Funktionen als eine Bourne-Shell bietet.

Sie können überprüfen, welches Zeichen die Tabulatortaste sendet, indem Sie echo ' Ctrl+ eingeben V Tab ' | od -t x1 Enter. 0000000 09 0a(dh an Position 0 zwei Zeichen, eine Registerkarte und eine neue Zeile) ist die erwartete Ausgabe. Ich erwarte nicht, dass dies das Problem ist.

Wenn Sie keine komfortable Umgebung erhalten, können Sie versuchen, mehr Dinge aus der Ferne zu erledigen, indem Sie Ihren lokalen Computer so oft wie möglich für die Interaktion verwenden. Das hat seine Höhen und Tiefen.

  • Unter Linux (oder den meisten anderen Unices, einschließlich OSX, jedoch nicht unter Windows) können Sie sshfs verwenden, um auf das Remote-Dateisystem zuzugreifen.
  • In Emacs können Sie Remote-Dateien einfach über Tramp durchsuchen (öffnen /os390hostname:/path/on/remote/machine, Sie erhalten die Fertigstellung). Sie können Eshell auch verwenden , um eine Remote-Shell-Schnittstelle (eine in Emacs integrierte Shell) abzurufen . Wenn Sie in ein Remote-Verzeichnis ( cd /os390hostname:/path/on/remote/machine) wechseln , werden die von Ihnen gestarteten externen Befehle auf dem Remote-Computer ausgeführt. Wenn Sie Befehle als root ausführen müssen, kann Tramp (und Eshell, das darauf basiert) ssh mit su oder sudo kombinieren .
Gilles 'SO - hör auf böse zu sein'
quelle
Danke! Strg + v TAB scheint sich nur zu einer Registerkarte zu erweitern, wie in:> echo '' | od -t x1 0000000000 05 15 0000000002
Thomas G Henry
Es hat mir das Leerzeichen entzogen! Vor 0000000000 und 0000000002 sollte zwischen dem '' und einer neuen Zeile eine Lücke in Tabulatorgröße bestehen. Wie auch immer, ich werde Ihre Remote-Vorschläge ausprobieren. Danke!
Thomas G Henry
Ich würde das positiv bewerten, aber ich habe nicht genug Ruf in dieser Community.
Thomas G Henry
@ ThomasGHenry: Jetzt machst du! :-)
OKtosiTe
Jep! Und ich habe mein Privileg ausgeübt. :)
Thomas G Henry
1

Wenn Sie set -o emacseine Fehlermeldung ausgeben können und diese nicht erhalten, verwenden Sie höchstwahrscheinlich nicht das bourne shellksh-Derivat.

Die Korn-Shell wird mit ESC automatisch vervollständigt. Haben Sie das versucht?

Übrigens: Wenn Sie wirklich gerne eine Bourne-Shell mit einem Verlaufseditor und mit Dateinamenvervollständigung verwenden, können Sie meine tragbare Bourne-Shell ausprobieren in:

http://sourceforge.net/projects/schilytools/files/

Da dies eine Bourne-Shell ist, die von sbrk () nach malloc () konvertiert wurde, wird sie in Nicht-UNIX-Umgebungen ausgeführt.

Möglicherweise gibt es immer noch Probleme mit der Portierung:

  • Wenn Ihre OS / 390-Umgebung EBCDIC verwendet, müssen die ctype * -Dateien bearbeitet werden.

  • Wenn Ihre Umgebung weder fork () noch eine OpenVMS-ähnliche vfork () -Emulation unterstützt, gibt es möglicherweise keine Möglichkeit, sie ohne einige Tage Aufwand kompilieren und ausführen zu lassen.

Unter http://schillix.sourceforge.net/man/man1/bosh.1.html finden Sie eine schnelle Überprüfung der Funktionen.

schily
quelle