Bash에서 지연된 일시 정지(Ctrl-Y)의 목적은 무엇입니까?

Bash에서 지연된 일시 정지(Ctrl-Y)의 목적은 무엇입니까?

Bash 매뉴얼 페이지의 해당 전체 섹션에는 다음과 같이 간단히 설명되어 있습니다.

Bash가 실행되는 운영 체제가 작업 제어를 지원하는 경우 Bash에는 이를 사용하는 도구가 포함되어 있습니다. 프로세스가 실행되는 동안 일시 중지 문자(일반적으로 ^Z, Control-Z)를 입력하면 프로세스가 중지되고 제어권이 bash로 반환됩니다. 지연된 일시 중지 문자(일반적으로 ^Y, Control-Y)를 입력하면 터미널에서 입력을 읽고 제어권을 bash로 반환하려고 시도하는 동안 프로세스가 중지됩니다.bg 그런 다음 사용자는 백그라운드에서 작업을 계속하는 명령, fg포그라운드에서 계속하는 명령, 작업을 종료하는 kill 명령을 사용하여 작업 상태를 조작할 수 있습니다 . ^Z는 즉시 적용되며 중단된 출력 및 자동 입력을 삭제하는 추가 부작용이 있습니다.

나는 사용한 적이 없습니다 Ctrl. - Y;방금 그것에 대해 배웠습니다. Ctrl- (일시 중지)만 사용해도 Z괜찮았습니다 .

이 옵션이 무엇인지 상상해 보려고 합니다.~을 위한. 언제 유용할까요?

(이 기능은 모든 Unix 변형에 존재하지 않습니다.솔라리스및 OpenBSD는 있지만 Linux나 FreeBSD는 해당되지 않습니다. 해당 설정은 입니다 stty dsusp. )

Ctrl아마도 덜 주관적일 것입니다. - Y로 쉽게 할 수 없는 것 -으로 할 수 있는 것이 있습니까 ?CtrlZ

답변1

~에서4BSD csh 매뉴얼:

A는 ^Z인터럽트처럼 즉시 적용되며, 입력하는 동안 보류 중인 출력과 읽지 않은 입력은 삭제됩니다. ^Y프로그램이 중지를 시도할 때까지 중지 신호를 생성하지 않는 또 다른 특수 키가 있습니다.읽다(2)IT. 작업을 읽은 후 중지하려는 작업에 대한 명령이 있는 경우 이 명령을 미리 입력할 수 있습니다.

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

답변2

입력을 읽고 실행하는 루프가 있다고 가정합니다. 작업이 새 명령을 실행하기 위해 명령줄로 돌아가기 전에 작업을 중단하지 않고 계산 중인 현재 명령을 완료하도록 하는 것이 유용할 수 있습니다. 이로써 사이클이 종료됩니다. 이렇게 하면 루프가 정상적으로 종료되고 read제한 시간 내에 다시 실행 되지 않습니다 .

답변3

이것이 유용할 수 있는 한 가지 시나리오를 생각할 수 있지만 이는 인위적인 극단적인 경우입니다.

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

read foo파일을 작성한 후(그러나 정리 전) 추가하고 스크립트를 실행한 다음 Ctrl파일이 생성되면 -를 누를 수 있습니다 . Y그러면 프롬프트가 표시되고 스크립트가 백그라운드에서 일시 중지되어 수행해야 하는 모든 작업을 수행한 다음 fg스크립트가 완료되도록 할 수 있습니다.

답변4

내가 생각할 수 있는 유일한 시나리오는 (심지어 그다지 설득력이 없다고 생각하는 경우에도) 쉘 명령에 자동 완성 기능을 사용하려는 경우입니다. 명령이 실행 중이고 향후 특정 시점에 입력을 읽을 것이라고 가정합니다. 그런 다음 ^Y하고 실행 중인 명령이 중단되는 동안 실행하려는 다음 쉘 명령을 즉시 입력할 수 있습니다. 나는 수십 년 동안 BSD Unix를 사용하면서 이것을 실제로 사용한 적이 없다고 생각합니다.

관련 정보