Czy CTRL + C jest niepoprawny w celu powrotu do wiersza poleceń?

27

Kiedy używam tail -fi chcę wrócić do powłoki, zawsze używam CTRL+C. Lub gdy piszę polecenie i mam ochotę je przerwać i zacząć od nowa, po prostu CTRL+Cwracam do pustego wiersza polecenia. Czy jest to uważane za złą praktykę? Czasami czuję, że może istnieć lepszy sposób na oderwanie się od czegoś, ale naprawdę nie mam pojęcia.

Przywróć Monikę
źródło
6
Aby anulować częściowo wprowadzone polecenie powłoki, możesz użyć Control-U lub Delete (w zależności od ustawień tty i powiązań klawiszy), ale nie ma nic złego w używaniu Control-C.
Keith Thompson
@KeithThompson dzięki za Ctrl + U, nie wiedziałem o tym :-)
Patrick
Dla przypomnienia, Cu tak naprawdę nie anuluje wprowadzonego polecenia, przenosi je do bufora wklejania (podobnie do funkcji „wycinania” niektórych programów).
Chris Down

Odpowiedzi:

36

Ctrl+ Cwysyła SIGINT do programu. Mówi to programowi, że chcesz przerwać (i zakończyć) jego proces. Większość programów poprawnie to łapie i czysto kończy działanie. Tak, jest to „poprawny” sposób na zakończenie większości programów.

Istnieją inne skróty klawiaturowe do wysyłania innych sygnałów do programów, ale jest to najczęściej.

Chris S.
źródło
9
Istnieje również Ctrl + D dla programów, które odczytują dane wejściowe od użytkownika. Ctrl + D zamyka STDIN do programu. Jest to również dostępne do wdzięcznego wychodzenia z powłoki (dokładnie tak samo jak pisanie komendy exit).
Patrick
2
@Patrick Ctrl + D faktycznie wysyła wskaźnik końca pliku do strumienia. Odpowiednie reagowanie (zazwyczaj zamykanie strumienia plików) zależy od programu.
Chris S
to właśnie robi zamknięcie STDIN. Nie można uzyskać EOF bez zamykania potoku / strumienia.
Patrick
9
Źle z trzech powodów, Patrick. Po pierwsze: Control + D nie ma tego znaczenia dla rur. Po drugie: znak specjalny EOF niczego nie zamyka. Powoduje to jednorazowy powrót zerowych bajtów (zakładając, że bufor linii jest pusty) z bieżącego read()wywołania systemowego. Następne read()nie ulegają zmianie. Po trzecie: nic z tego nie dotyczy programów, które wprowadzają dyscyplinę liniową w tryb niekanoniczny, takich jak większość programów powłoki z ostatnich kilku dziesięcioleci, a nawet każdy inny program korzystający z biblioteki takiej jak GNU readline.
JdeBP
13

Ta metoda jest w porządku, naprawdę.

Sven
źródło
11

Aby przerwać długie polecenie podczas pisania, czasami przeskakuję na początek wiersza i wstawiam znak komentarza przed naciśnięciem klawisza Enter:

Home#Enter

Pos1#Return

Jest to przydatne, jeśli wpisałem na przykład polecenie kopiowania z długą ścieżką i jednocześnie zauważyłem, że najpierw muszę utworzyć katalog, ale później chcę powtórzyć polecenie. Następnie muszę tylko pobrać go z historii, usunąć skrót i wprowadzić go.

W Bash możesz użyć skrótu

Alt+#

, aby przypomnieć polecenie, jak wskazano w komentarzach (Dzięki, @Zorawar).

nieznany użytkownik
źródło
6
Możesz także używać Ctrl-Abez odrywania palców od rzędu domu.
Dietrich Epp,
1
A tak przy okazji, Ctrl-Eidzie do końca.
Dave
@Dave: Zgadza się, ale nie musisz przechodzić do końca, aby nacisnąć Enter, aby potwierdzić polecenie. Wiersz poleceń nie jest edytorem, w którym może wstawić nowy wiersz.
użytkownik nieznany
2
W bash możesz osiągnąć to samo, naciskając tylko Alt-#: wstawi komentarz i uruchomi polecenie (więc umieszczasz go w swojej historii).
Zorawar
8

Ogólnie rzecz biorąc, użycie Ctrl+ Cjest w porządku, gdy program nie oferuje interaktywnego sposobu zakończenia (z założenia lub częściej, ponieważ zawiesił się lub stał się bezużyteczny). Pamiętaj tylko, że w trybie interaktywnym kluczową kombinacją klawiszy, którą naprawdę chcesz, może być Ctrl+ D, która wysyła EOFsygnał sygnalizujący koniec wejścia.

Zorawar
źródło
1

Jeśli używasz Bash, możesz także użyć Ctrl- Zi wpisać, bgaby „umieścić bieżące zadanie w tle”.

Computist
źródło
0

Jak powiedział @Patrick w komentarzu do zaakceptowanej odpowiedzi,

Istnieją również Ctrl+Dprogramy odczytujące dane wejściowe od użytkownika. Ctrl+Dzamyka STDIN do programu.

Pomogło mi to, gdy Ctrl+Cnie działało odzyskanie wiersza poleceń po użyciu>>

enharmoniczny
źródło