CTRL + C est-il incorrect à utiliser pour revenir à la ligne de commande?

27

Lorsque j'utilise tail -fet que je veux revenir au shell, j'utilise toujours CTRL+C. Ou quand je tape une commande et que j'ai envie de l'annuler et de recommencer, je CTRL+Creviens simplement à une invite de ligne de commande vide. Est-ce considéré comme une mauvaise pratique? J'ai parfois l'impression qu'il pourrait y avoir une meilleure façon de rompre avec quelque chose, mais je n'en ai vraiment aucune idée.

Réintégrer Monica
la source
6
Pour annuler une commande shell partiellement entrée, vous pouvez utiliser Control-U ou Delete (selon vos paramètres tty et les raccourcis clavier), mais il n'y a rien de mal à utiliser Control-C.
Keith Thompson
@KeithThompson merci pour le Ctrl + U, je n'étais pas au courant de celui-là :-)
Patrick
Pour mémoire, Cu ne fait annuler la commande entrée, elle se déplace dans la mémoire tampon de pâte (similaire à la fonctionnalité « coupé » de certains programmes).
Chris Down

Réponses:

36

Ctrl+ Cenvoie un SIGINT au programme. Cela indique au programme que vous souhaitez interrompre (et terminer) son processus. La plupart des programmes interceptent correctement cela et quittent proprement. Donc, oui, c'est une façon "correcte" de terminer la plupart des programmes.

Il existe d'autres raccourcis clavier pour envoyer d'autres signaux aux programmes, mais c'est le plus courant.

Chris S
la source
9
Il existe également Ctrl + D pour les programmes qui lisent les entrées de l'utilisateur. Ctrl + D ferme STDIN au programme. Pour quitter le shell avec élégance, cela est également disponible (exactement la même chose que pour taper exit).
Patrick
2
@Patrick Ctrl + D envoie en fait un indicateur de fin de fichier au flux. C'est au programme de répondre de manière appropriée (généralement en fermant le flux de fichiers).
Chris S
c'est ce que fait la fermeture de STDIN. Vous ne pouvez pas obtenir EOF sans que le tuyau / flux ne soit fermé.
Patrick
9
Faux sur trois points, Patrick. Premièrement: Control + D n'a pas cette signification pour les tuyaux. Deuxièmement: le caractère spécial EOF ne ferme rien. Il provoque un retour unique de zéro octet (en supposant que le tampon de ligne est vide) à partir de l' read()appel système en cours . Les prochains read()s ne sont pas affectés. Troisièmement: rien de tout cela ne s'applique aux programmes qui mettent la discipline de ligne en mode non canonique, comme la plupart des programmes shell des deux dernières décennies et en fait tout autre programme qui utilise une bibliothèque telle que GNU readline.
JdeBP
13

Cette méthode est très bien, vraiment.

Sven
la source
11

Pour abandonner une longue commande lors de la frappe, je saute parfois au début de la ligne et insère un signe de commentaire avant d'appuyer sur Entrée:

Home#Enter

Pos1#Return

Ceci est utile, si j'ai tapé une commande de copie avec un long chemin, par exemple, et observez en attendant, que je dois d'abord créer le répertoire, mais je voudrais répéter la commande par la suite. Ensuite, je dois simplement le retirer de l'historique, supprimer le hachage et le saisir.

Dans Bash, vous pouvez utiliser le raccourci

Alt+#

pour remarquer votre commande, comme indiqué dans les commentaires (Merci, @Zorawar).

Utilisateur inconnu
la source
6
Vous pouvez également l'utiliser Ctrl-Asans retirer vos doigts de la ligne d'accueil.
Dietrich Epp du
1
Et Ctrl-Eva à la fin, d'ailleurs.
Dave
@Dave: C'est vrai, mais vous n'avez pas besoin de vous déplacer jusqu'à la fin pour appuyer sur Entrée, pour confirmer votre commande. La ligne de commande n'est pas un éditeur, où cela pourrait insérer une nouvelle ligne.
utilisateur inconnu
2
En bash, vous pouvez réaliser la même chose en appuyant simplement sur Alt-#: il mettra le commentaire et exécutera la commande (donc le mettre dans votre historique).
Zorawar
8

De manière générale, l'utilisation de Ctrl+ Cest très bien lorsque le programme ne vous offre aucun moyen interactif de terminer (soit par conception, soit, plus fréquemment, car il a gelé ou est devenu inutilisable). Gardez à l'esprit que, en mode interactif, le combo de touches que vous voulez vraiment peut être Ctrl+ D, qui envoie un EOFsignalant la fin de l'entrée.

Zorawar
la source
1

Si vous utilisez Bash, vous pouvez également utiliser Ctrl- Zet taper bgpour "mettre le travail actuel en arrière-plan".

Informaticien
la source
0

Comme @Patrick l'a dit dans le commentaire sur la réponse acceptée,

Il y a aussi Ctrl+Dpour les programmes qui lisent les entrées de l'utilisateur. Ctrl+Dferme STDIN au programme.

Cela m'a aidé quand je Ctrl+Cn'ai pas travaillé pour récupérer la ligne de commande après avoir utilisé>>

enharmonique
la source