CTRL + C non è corretto da utilizzare per tornare alla riga di comando?


27

Quando sto usando tail -fe voglio tornare alla shell, lo uso sempre CTRL+C. O quando sto digitando un comando e ho voglia di interromperlo e ricominciare da capo, devo semplicemente CTRL+Ctornare a un prompt della riga di comando vuoto. Questa è considerata una cattiva pratica? A volte sento che potrebbe esserci un modo migliore per staccarsi da qualcosa, ma davvero non ne ho idea.


6
Per annullare un comando shell parzialmente immesso, puoi usare Control-U o Delete (a seconda delle tue impostazioni tty e dei collegamenti dei tasti), ma non c'è niente di sbagliato nell'usare Control-C.
Keith Thompson,

@KeithThompson grazie per il Ctrl + U, non ne ero a conoscenza :-)
Patrick

Per la cronaca, Cu in realtà non annulla il comando inserito, lo sposta nel buffer di incollaggio (simile alla funzionalità "taglia" di alcuni programmi).
Chris Down,

Risposte:


36

Ctrl+ Cinvia un SIGINT al programma. Questo dice al programma che si desidera interrompere (e terminare) il processo. La maggior parte dei programmi rileva correttamente ed esce in modo pulito. Quindi sì, questo è un modo "corretto" per terminare la maggior parte dei programmi.

Esistono altre scorciatoie da tastiera per inviare altri segnali ai programmi, ma questa è la più comune.


9
C'è anche Ctrl + D per i programmi che stanno leggendo l'input dell'utente. Ctrl + D chiude STDIN al programma. Per uscire con grazia dalla shell è anche disponibile (esattamente come digitare exit).
Patrick,

2
@Patrick Ctrl + D invia effettivamente un indicatore End of File allo stream. Spetta al programma rispondere in modo appropriato (in genere chiudendo il flusso di file).
Chris S,

questo è ciò che fa la chiusura di STDIN. Non è possibile ottenere EOF senza il pipe / stream chiuso.
Patrick

9
Sbagliato per tre motivi, Patrick. Primo: Control + D non ha questo significato per le pipe. Secondo: il personaggio speciale dell'EOF non chiude nulla. Causa un ritorno una tantum di zero byte (presumendo che il buffer di linea sia vuoto) dalla read()chiamata di sistema corrente . I successivi read()non sono interessati. Terzo: niente di tutto ciò si applica ai programmi che mettono la disciplina di linea in modalità non canonica, come la maggior parte dei programmi di shell degli ultimi due decenni e in effetti qualsiasi altro programma che utilizza una libreria come GNU readline.
JdeBP,

13

Questo metodo è perfetto, davvero.


11

Per interrompere un comando lungo durante la digitazione, a volte salto all'inizio della riga e inserisco un segno di commento, prima di premere invio:

Home#Enter

Pos1#Return

Questo è utile, se ho digitato un comando di copia con un percorso lungo, ad esempio, e nel frattempo osserva che prima devo creare la directory, ma vorrei ripetere il comando in seguito. Quindi devo solo prenderlo dalla cronologia, eliminare l'hash e inserirlo.

In Bash, puoi usare il collegamento

Alt+#

per osservare il tuo comando, come sottolineato nei commenti (Grazie, @Zorawar).


6
Puoi anche usare Ctrl-Asenza staccare le dita dalla fila di casa.
Dietrich Epp,

1
E Ctrl-Eva fino in fondo, a proposito.
Dave,

@Dave: Esatto, ma non è necessario spostarsi alla fine per premere Invio, per confermare il comando. La riga di comando non è un editor, in cui ciò potrebbe inserire una nuova riga.
utente sconosciuto

2
In bash puoi ottenere la stessa cosa semplicemente premendo Alt-#: inserirà il commento ed eseguirà il comando (quindi inserendolo nella tua cronologia).
Zorawar,

8

In generale, usare Ctrl+ Cva bene quando il programma non offre alcun modo interattivo per terminare (in base alla progettazione o, più frequentemente, perché si è bloccato o è diventato inutilizzabile). Basta tenere presente che, quando si è in modalità interattiva, la combinazione di tasti che si desidera veramente potrebbe essere Ctrl+ D, che invia un EOF, segnalando la fine dell'input.


1

Se si utilizza Bash, si può anche usare Ctrl- Z, e digitare bgper "mettere il lavoro corrente in background".


0

Come ha affermato @Patrick nel commento sulla risposta accettata,

C'è anche Ctrl+Dper i programmi che stanno leggendo l'input dell'utente. Ctrl+Dchiude STDIN al programma.

Questo mi ha aiutato quando Ctrl+Cnon ha funzionato per recuperare la riga di comando dopo l'uso>>

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.