Ich folge dem Muster, die Aufgabe auszusetzen und sie dann zu oft mit der Ctrl-Z bgSequenz fortfahren zu lassen .
Ich habe mich gefragt, ob es eine Möglichkeit gibt, das auf einen einzigen Tastendruck zu komprimieren.
Meine Muschel ist zsh
linux
keyboard-shortcuts
shell
zsh
Evgeniy Dolzhenko
quelle
quelle
Antworten:
Die Ctrl+ Z-Sequenz wird vom Terminal und nicht von der Shell verarbeitet. (Nützlicher Hintergrund: Was ist der genaue Unterschied zwischen einem "Terminal", einer "Shell", einem "Tty" und einer "Konsole"? )
Nur ein kleiner, nicht erweiterbarer Satz von Funktionen kann an einen Schlüssel in einem Terminal gebunden werden . Sie können die an diese Funktionen gebundenen Tasten anpassen, aber keine weitere Funktion hinzufügen. Diese Funktionen lassen sich in drei Kategorien einteilen:
eof
, Ctrl+ D), Zeilenende (eol
, Ctrl+ M), Zeichen links löschen (erase
, Ctrl+ H), Wort links löschen (werase
, Ctrl+ W), Zeile löschen (kill
, Ctrl+ U).stop
( Ctrl+ S),start
( Ctrl+ Q). Nur nützlich bei alten seriellen Terminals, bei denen Zeichen verloren gingen, wenn das Terminal nicht mit dem Computer mithalten konnte oder umgekehrt.intr
, Ctrl+ C), Force Quit (quit
, Ctrl+ \), Suspend ( Ctrl+ Z).Einige Systeme, einschließlich Linux, erweitern diese Liste, aber ich habe noch nie ein System mit Hintergrundinformationen gesehen. Beachten Sie, dass dies sowohl den Terminal-Treiber im Kernel als auch den Terminal-Emulator unterstützt. Sie müssen sich also mit suspend begnügen, das dem Vordergrundjob ein SIGTSTP- Signal sendet . Dies löst eine SIGCHLD im übergeordneten Prozess des Leaders des Vordergrundjobs aus, bei dem es sich normalerweise um die Shell handelt. Wenn die Shell SIGCHLD empfängt, ruft sie
waitpid
auf, um herauszufinden, warum sie benachrichtigt wurde, und zeigt bei Feststellung, dass ein Hintergrundjob angehalten wurde, eine Benachrichtigung (z. B.[1] + 12345 suspended mycommand
) und eine neue Eingabeaufforderung an.Sie können die Shell so programmieren, dass ein
SIGCONT
Signal an den Vordergrundjob gesendet wird. Ich glaube nicht, dass zsh einen Haken dafür hat, Sie müssten den Quellcode patchen. Und zsh kann nicht wissen, ob Sie das Programm wirklich unterbrechen wollten (hoppla, dieses Programm macht möglicherweise das Falsche, lass es mich anhalten, während ich es aussortiere) oder es im Hintergrund anzeigen.Ich setze die Ctrl+ Z-Tastenfolge in zsh auf den Hintergrund des aktuellen Jobs (
%%
). Auf diese Weise kann ich den Vordergrundjob durch Drücken von Ctrl+ Z Ctrl+ in den Hintergrund verschieben Z. Wenn die aktuelle Eingabezeile nicht leer ist (ich bin also nicht gerade von einem Unterprozess zurückgekehrt), lasse ich Ctrl+ Znoch etwas Nützliches tun: Hänge die aktuelle Eingabezeile an und erlaube mir, einen anderen Befehl einzugeben Danach wird die unterbrochene Leitung in den Eingangspuffer zurückgeschoben.quelle
^ z ^ z wie zsh oben ist in bash möglich, obwohl es ein bisschen kludgy ist und ich habe das nicht lange ausgeführt:
"\C-z": "bg\n"
So wird ^ z for suspend aktiviert, wenn ein Befehl ausgeführt wird, und dann für die Bash-Eingabeaufforderung deaktiviert.
quelle
Also fand die Lösung nicht genau das, was ich will, aber verdammt knapp von hier /superuser//a/161922/35223
quelle
Ctrl+Z
Aufruf ausführtbg
, ich bin mir nicht sicher, ob eine nicht leere Eingabezeile erkannt wird).Wollten Sie diese Befehle zunächst im Vordergrund ausführen und dann in den Hintergrund wechseln? Ich weiß nicht, ob es einen einfacheren Weg gibt. Wenn Sie jedoch Befehle ausführen möchten, die zunächst im Hintergrund ausgeführt werden, können Sie am Ende der Zeile ein kaufmännisches Und hinzufügen.
ping google.com &
Fängt zB an, im Hintergrund zu pingen; Sie können nicht damit interagieren, es sei denn, Sie geben einfg
.quelle