Bash에서 지연 일시 중단 (Ctrl-Y)의 목적은 무엇입니까? 부분은 다음과 같습니다.

Bash 매뉴얼 페이지의 전체 부분은 다음과 같습니다.

bash가 실행중인 운영 체제가 작업 제어를 지원하는 경우 bash에는이를 사용하는 기능이 있습니다. 프로세스가 실행되는 동안 일시 중단 문자 (일반적으로 ^ Z, Control-Z)를 입력하면 해당 프로세스가 중지되고 제어를 bash로 리턴합니다.
지연된 일시 중단 문자 (일반적으로 ^ Y, Control-Y)를 입력하면 터미널에서 입력을 읽으려고 할 때 프로세스가 중지되고 제어는 bash로 리턴됩니다. 그런 다음 사용자는 bg
백그라운드에서 작업 을 계속하기 위해 명령을 사용하여이 작업의 상태를 조작 할 수 있습니다 .fg명령을 포 그라운드에서 계속하거나 kill 명령을 사용하여 종료하십시오. ^ Z는 즉시 적용되며 보류중인 출력과 자동 완성 기능을 버리는 추가 부작용이 있습니다.

나는 결코 사용하지 않았다 CtrlY; 나는 단지 그것에 대해 배웠다. 나는 CtrlZ(일시 중단)으로 만 잘했습니다.

나는이 옵션이 무엇인지 상상하는 것을 시도하고있다 위해 . 언제 유용할까요?

(이 기능은 모든 Unix 변형에는 존재하지 않습니다. SolarisFreeBSD 에는 있지만 Linux에는 없습니다. 해당 설정은 stty dsusp입니다.)

아마도 덜 주관적 : 함께 수행 할 수 있습니다 무엇인가 CtrlY와 마찬가지로 쉽게 수행 할 수 없습니다 CtrlZ?



답변

csh에 대한 4BSD 매뉴얼에서 :

A ^Z는 즉시 적용되며 보류중인 출력 및 읽지 않은 입력이 입력 될 때 삭제되는 인터럽트와 같습니다. ^Y프로그램이이를 읽으 려고 시도 할 때까지 STOP 신호를 생성하지 않는 또 다른 특수 키가 있습니다 (2). 이 명령은 읽은 후에 중지하려는 작업에 대한 일부 명령을 준비 할 때 유용하게 미리 입력 할 수 있습니다.

따라서 첫 번째 입력을 처리하는 동안 여러 입력을 입력하고 완료된 후 작업을 중지하는 것이 목적입니다.


답변

루프 읽기 입력과 실행이 있다고 가정하십시오. 새로운 명령을 얻기 위해 명령 행으로 돌아 가기 전에 작업이 명령을 중단하지 않고 계산하는 현재 명령을 완료하도록하는 것이 유용 할 수 있습니다. 따라서 사이클을 종료합니다. 이는 루프를 정상적으로 종료하고 read제한 시간이 초과 되면 루프 가 다시 실행되지 않도록합니다 .


답변

유용 할 수있는 한 가지 시나리오를 생각할 수 있지만, 이는 엣지 케이스입니다.

정리 루틴의 일부로 삭제되기 전에 분석하려는 임시 파일을 작성하는 스크립트를 디버깅한다고 가정하십시오.

read foo파일이 작성된 후 (정리 전) 어딘가에 추가 하고 스크립트를 실행 한 다음 생성 되는대로 CtrlY를 누를 수 있습니다. 그런 다음 필요한 작업을 수행하기 위해 백그라운드에서 스크립트를 일시 중지 한 상태로 프롬프트가 표시 fg되고 스크립트를 완료 할 수 있습니다 .


답변

내가 생각할 수있는 유일한 시나리오는 (심지어 설득력이 없다고 생각하더라도) 쉘 명령에 미리 입력을 사용하려는 경우입니다. 나중에 어떤 시간에 입력을 읽는 명령이 실행 중이라고 가정하십시오. 그런 다음 ^ Y를 수행 한 다음 실행중인 명령이 일시 중단 될 때 실행할 다음 셸 명령을 즉시 입력 할 수 있습니다. 필자는 수십 년 동안 BSD 유닉스를 실제로 사용했다고 생각하지 않습니다.