La partie complète de la page de manuel de Bash qui s'applique s'applique uniquement:
Si le système d'exploitation sur lequel bash s'exécute prend en charge le contrôle des travaux, bash contient des fonctionnalités pour l'utiliser. La saisie du caractère de suspension (généralement ^ Z, Control-Z) pendant l'exécution d'un processus entraîne l'arrêt de ce processus et renvoie le contrôle à bash. La saisie du caractère de suspension différée (généralement ^ Y, Control-Y) entraîne l'arrêt du processus lorsqu'il tente de lire l'entrée du terminal et le retour du contrôle à bash. L'utilisateur peut alors manipuler l'état de ce travail, en utilisant la
bg
commande pour le continuer en arrière-plan, lefg
pour continuer au premier plan, ou la commande kill pour le tuer. A ^ Z prend effet immédiatement et a pour effet secondaire supplémentaire de supprimer la sortie et la frappe en attente.
Je n'ai jamais utilisé Ctrl- Y; Je viens juste de l'apprendre. J'ai bien fait avec Ctrl- Z(suspendre) seulement.
Je suis en train d'imaginer ce que cette option est pour . Quand serait-ce utile?
(Notez que cette fonctionnalité n'existe pas sur toutes les variantes Unix. Elle est présente sur Solaris et FreeBSD mais pas sur Linux. Le paramètre correspondant est stty dsusp
.)
Peut-être moins subjectivement: y a-t-il quelque chose qui peut être accompli avec Ctrl- Yqui ne peut pas être accompli aussi facilement avec Ctrl- Z?
la source
stty dsusp
, je n'ai pas réussi à lui faire envoyer un SIGTSTP sur ^ Y (je l'ai fait sur Solaris). Avez-vous?Réponses:
Du manuel 4BSD pour csh :
Ainsi, le but est de taper plusieurs entrées pendant que la première est en cours de traitement et d'arrêter le travail une fois qu'elles sont terminées.
la source
^Y
sera lu avec succès, puis lorsque le^Y
est frappé le processus sera arrêté. Suis-je en train de lire ça?^Y
, même si vous avez renié le processus et fermé votre terminal avant la reprise du processus. Droite? ( "... après sa reprise, il reçoit l'entrée d'avant ^ Y." C'est ce que je voulais dire; je ne traite généralement pas en code C.) :)Disons qu'il y a une entrée de lecture en boucle et une exécution. Il peut être utile de laisser la tâche terminer l'instruction en cours qu'elle calcule, sans l'interrompre avant de revenir à la ligne de commande pour une nouvelle. Donc donc pour terminer un cycle. Cela termine la boucle gracieusement et l'empêche de s'exécuter à nouveau s'il
read
est soumis à une restriction de délai d'attente.la source
^Z
faire ensuite .Je peux penser à un scénario où cela pourrait être utile, mais c'est quelque chose d'un cas de bord artificiel.
Supposons que vous déboguez un script qui écrit des fichiers temporaires que vous souhaitez analyser avant de les supprimer dans le cadre d'une routine de nettoyage.
Vous pouvez ajouter un
read foo
quelque part après l'écriture des fichiers (mais avant le nettoyage), exécuter le script et appuyer sur Ctrl- au Yfur et à mesure qu'ils sont générés. Vous serez ensuite redirigé vers une invite avec le script suspendu en arrière-plan pour faire tout ce que vous devez faire, et pourrez ensuitefg
autoriser le script à se terminer.la source
^Z
. En d' autres termes: une fois que vous tapez ,fg
vous devrez donner une entrée le script de toute façon avant qu'il continuera. D'où ma question; Je ne vois toujours pas l'intérêt de^Y
. (Merci d'avoir répondu, cependant!) :)Le seul scénario auquel je peux penser (et même je ne le trouve pas très convaincant), c'est si vous voulez utiliser un type-ahead pour une commande shell. Dites qu'une commande est en cours d'exécution et qu'elle lira les entrées dans le futur. Ensuite, vous pouvez le faire ^ Y, puis taper immédiatement la commande shell suivante que vous souhaitez exécuter lorsque la commande en cours se suspend. Je ne pense pas avoir vraiment utilisé cela depuis plusieurs décennies d'utilisation de BSD Unix.
la source