예기치 않은 `nano SomeFile`로 인해 쉘이 응답하지 않게 됩니다.

예기치 않은 `nano SomeFile`로 인해 쉘이 응답하지 않게 됩니다.

간단한 텍스트 파일에서 고유한 항목(행 읽기)을 얻으려고 할 때 실수로 nano SomeTextFile | uniq.

이 "명령"은 쉘(bash)을 완전히(?) 응답하지 않거나 사용할 수 없게 만듭니다.우시그리고위로. 다시 돌려받아야 해프로세스 번호(PID) (을 실행하여 ps aux | grep nano) sudo kill -9문제의 PID를 수동으로 설정합니다.

어쨌든 위의 내용이 일부 오류 메시지를 반환할 수 없거나 반환해서는 안 됩니까? Ctrl+ 왜 C이 파이프를 죽이지 않는 걸까요? 이것보다 더 쉽고 깨끗한 예방 방법이 있습니까 kill -9?

답변1

파이프 기호는 명령의 출력을 nano명령의 입력으로 보냅니다 uniq.

그러나 nano여전히 실행 중이며 키보드 입력을 수신하고 있습니다. uniq파일의 끝을 볼 때까지 결과가 출력되지 않기 때문에 출력을 볼 수 없다는 것입니다 (질문에서는 중요하지 않음).

nano 를 누르면 ctrl-cnano 에 '잡히지만' 종료되지는 않습니다.

nano를 종료하는 방법은 다음을 누르는 것입니다.ctrl-x, 그러나 nano수정된 ​​경우(예: 입력 후 다른 키를 누른 경우) 종료되지 않습니다. 이 경우 nano는 다음과 같은 메시지를 표시합니다.

Save modified buffer (ANSWERING "No" WILL DESTROY CHANGES) ?                                                                
 Y Yes
 N No           ^C Cancel

"n" 키를 누르면 변경 사항을 저장하지 않고 종료됩니다.

Nano에 있다는 사실을 깨닫기 전에 몇 가지 키 조합을 누를 수 있으며, 이 경우 몇 가지 메뉴가 깊이 있게 표시될 수 있습니다. 다행히도 nano를 누르면 ctrl-x대부분의 메뉴가 종료됩니다(그러나 위의 프롬프트는 취소되지 않습니다). 즉, ctrl-x여러 번 눌러도 종료에서 더 이상 벗어날 수는 없습니다.

일부 메뉴에서 "멈추는" 경우 일반적으로 다음을 통해 이 작업을 수행할 수 있습니다.ctrl-xn번 누른 후 키를 누릅니다. 그래도 작동하지 않으면 ctrl-x너무 많이 눌렀다는 뜻입니다. 그냥 누르세요.ctrl-x 하나시간이 더 걸리면 n열쇠가 필요합니다. 항상 작동합니다.

답변2

다른 답변에서 이미 설명했듯이 Ctrl+ 는 입력이 여전히 터미널에서 나오고 터미널이 여전히 제어 터미널이기 C때문에 Nano를 죽이지 않습니다 . 따라서 Nano는 터미널을 + 와 같은 제어 문자가 프로그램으로 전송되고 신호를 생성하기 위해 터미널 Intercept에서 사용되지 않습니다.nanonanoCtrlC

터미널에 의해 가로채면 Ctrl+는 C다음을 생성합니다.지능을 신호하다신호. 프로세스 ID를 알고 있는 경우(Linux 구문 또는 기타 프로세스 목록 유틸리티를 사용하여 찾을 수 있음 nano) 이 신호를 보낼 수 있습니다. 여기서 12345는 PID입니다. 그러나 SIGINT는 전통적으로 "메인 루프로 복귀"를 의미하며 Nano는 SIGINT를 수신해도 종료되지 않습니다. 대신 보내세요ps u -C nanopspgrep nanokill -INT 12345신호 용어, 이는 "정상적으로 종료"를 의미합니다 . 이는 기본 신호이므로 실행할 수 있습니다 kill 12345.kill -HUP 12345한숨을 쉬다"더 이상 터미널이 없습니다. 터미널 없이 살 수 없다면 우아하게 나가세요"라는 뜻입니다. 다른 모든 방법이 실패하면 보내십시오.신호 살해( kill -KILL 12345또는 유명한 kill -9 12345)는 프로그램이 죽기를 원하든 원하지 않든 프로그램을 종료합니다.

Nano를 포함한 많은 프로그램은 Ctrl+를 Z일시 정지로 인식합니다. 전송된 것과 동일한 시퀀스입니다.신호 프로토콜신호. 프로그램이 이 컨트롤 키를 인식하면 쉘 프롬프트가 나타나며, 프로그램이 백그라운드 작업이 되므로 쉽게 종료할 수 있습니다 kill %%(이것은 백그라운드에 있던 마지막 작업에 신호를 보냅니다).

나노에는 다음과 같은 것이 있습니다.또 다른 방법:종료 키 시퀀스를 보냅니다. Ctrl+ 뒤에 X필요한 경우 N"저장하지 않음" 이 옵니다. 하지만 일반적으로 다음 사항을 명심하세요.

  1. 프로그램이 종료되지 않으면 + Ctrl를 입력해 보십시오 .Zkill %%kill -9 %%
  2. Ctrl+가 작동하지 않으면 Z다른 터미널로 전환하고 프로세스 ID( ps -t pts/42터미널에서 실행 중인 프로세스를 나열하는 데 사용할 수 있음 /dev/pts/42)를 찾아 종료합니다.

답변3

쉘은 당신을 받아들이지 않을 것 입니다 Ctrl+C. nano그렇습니다. 인터럽트 신호에 대한 사용자 정의 동작을 정의할 수 있는 프로그램이 nano그러한 프로그램 중 하나입니다. 리디렉션 없이 열리는 사용자 정의 동작을 확인 nano하고 보내려면 Ctrl+C.

답변4

스트라이크 Ctrl+ X.

Nano는 모든 키보드 입력을 캡처하며 CtrlNano+ 내부의 의미 C는 셸의 의미와 완전히 다릅니다. 별도의 창에서 실행 중인 경우 nano종료하려면 어떤 키를 입력해야 하는지 쉽게 확인할 수 있습니다. Ctrl+X

관련 정보