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.


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.


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


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).


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.


1

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


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>>

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.