Der vollständige Teil der Bash-Manpage, der anwendbar ist, sagt nur:
Wenn das Betriebssystem, auf dem bash ausgeführt wird, die Jobsteuerung unterstützt, enthält bash Funktionen zur Verwendung. Wenn Sie das Suspend-Zeichen (normalerweise ^ Z, Strg-Z) eingeben, während ein Prozess ausgeführt wird, wird dieser Prozess angehalten und die Steuerung wird an die Bash zurückgegeben. Durch die Eingabe des verzögerten Anhaltezeichens (normalerweise ^ Y, Strg-Y) wird der Prozess angehalten, wenn versucht wird, Eingaben vom Terminal zu lesen, und die Steuerung wird an bash zurückgegeben. Der Benutzer kann dann den Status dieses Auftrags ändern, indem er den
bg
Befehl verwendet, um ihn im Hintergrund fortzusetzenfg
Befehl, um es im Vordergrund fortzusetzen, oder Befehl kill, um es zu töten. A ^ Z wird sofort wirksam und hat den zusätzlichen Nebeneffekt, dass anstehende Ausgaben und Druckaufträge verworfen werden.
Ich habe noch nie benutzt Ctrl- Y; Ich habe es gerade erst gelernt. Ich habe es nur mit Ctrl- Z(suspend) gut gemacht.
Ich versuche mir vorzustellen , was diese Option ist für . Wann wäre es sinnvoll?
(Beachten Sie, dass diese Funktion nicht bei allen Unix-Varianten vorhanden ist. Sie ist unter Solaris und FreeBSD verfügbar, jedoch nicht unter Linux. Die entsprechende Einstellung lautet stty dsusp
.)
Vielleicht weniger subjektiv: Gibt es etwas, mit dem man etwas erreichen kann Ctrl- Ydas man nicht so einfach erreichen kann Ctrl- Z?
quelle
stty dsusp
ich es nicht geschafft, ein SIGTSTP auf ^ Y zu senden (ich tat es auf Solaris). Hast du?Antworten:
Aus dem 4BSD-Handbuch für csh :
Der Zweck besteht also darin, mehrere Eingaben einzugeben, während die erste verarbeitet wird, und den Job danach anzuhalten.
quelle
^Y
erfolgreich gelesen werden, und dann , wenn die^Y
getroffen wird , wird der Prozess gestoppt werden. Lese ich das richtig?^Y
, auch wenn Sie den Prozess abgelehnt und Ihr Terminal geschlossen haben, bevor der Prozess fortgesetzt wird. Recht? ( "... nachdem es wieder aufgenommen wurde, erhält es die Eingabe von vor ^ Y." Das habe ich gemeint; ich befasse mich normalerweise nicht mit C-Code.) :)Angenommen, es wird eine Schleife zum Lesen eingegeben und ausgeführt. Es kann nützlich sein, die Aufgabe den aktuellen Befehl beenden zu lassen, ohne ihn zu unterbrechen, bevor sie für einen neuen Befehl zur Befehlszeile zurückkehrt. So also, um einen Zyklus zu beenden. Dies beendet die Schleife ordnungsgemäß und verhindert, dass sie erneut ausgeführt wird, wenn
read
eine Zeitüberschreitung vorliegt.quelle
^Z
es dann tun .Ich kann mir ein Szenario vorstellen, in dem es nützlich sein könnte, aber es ist so etwas wie ein erfundener Randfall.
Angenommen, Sie debuggen ein Skript, das temporäre Dateien schreibt, die Sie analysieren möchten, bevor sie im Rahmen einer Bereinigungsroutine gelöscht werden.
Sie können
read foo
irgendwo nach dem Schreiben der Dateien (aber vor der Bereinigung) ein hinzufügen , das Skript ausführen und Ctrl- drücken, Ywährend sie generiert werden. Sie werden dann zu einer Eingabeaufforderung weitergeleitet, in der das Skript im Hintergrund angehalten wird, um alle erforderlichen Aktionen auszuführen. Anschließend können Siefg
zulassen, dass das Skript ausgeführt wird.quelle
^Z
. Mit anderen Worten: Nachdem Siefg
etwas eingegeben haben, müssen Sie dem Skript ohnehin eine Eingabe geben, bevor es fortgesetzt werden kann. Daher meine Frage; Ich verstehe immer noch nicht, worum es geht^Y
. (Danke für die Antwort!) :)Das einzige Szenario, an das ich denken kann (und auch wenn ich es nicht sehr überzeugend finde), ist, wenn Sie einen Typ-Ahead-Befehl für ein Shell-Kommando verwenden möchten. Angenommen, ein Befehl wird ausgeführt, der zu einem späteren Zeitpunkt Eingaben lesen wird. Anschließend können Sie ^ Y it eingeben und sofort den nächsten Shell-Befehl eingeben, den Sie ausführen möchten, wenn der ausgeführte Befehl angehalten wird. Ich glaube nicht, dass ich dies in mehreren Jahrzehnten mit BSD Unix jemals wirklich genutzt habe.
quelle