이 이스케이프 시퀀스를 입력하여 문자 그대로 "파일을 종료"합니까? 즉, 대화식 쉘 세션이 다른 파일 스트림과 같이 쉘에 의해 실제 파일 스트림으로 표시됩니까? 그렇다면 어떤 파일입니까?
아니면 Ctrl+ D신호가 자리 표시 자일 뿐입니 까? "사용자가 입력을 마치고 종료 할 수 있음"을 의미합니까?
set -o ignoreeof
해당 동작을 변경하기 위해 할 수 있습니다 .
이 이스케이프 시퀀스를 입력하여 문자 그대로 "파일을 종료"합니까? 즉, 대화식 쉘 세션이 다른 파일 스트림과 같이 쉘에 의해 실제 파일 스트림으로 표시됩니까? 그렇다면 어떤 파일입니까?
아니면 Ctrl+ D신호가 자리 표시 자일 뿐입니 까? "사용자가 입력을 마치고 종료 할 수 있음"을 의미합니까?
set -o ignoreeof
해당 동작을 변경하기 위해 할 수 있습니다 .
답변:
^D
문자 (라고도 \04
또는 0x4로는 TRANSMISSION OF END 유니 코드)를위한 디폴트 값 eof
커널 단말 또는 의사 단말 드라이버 특별 제어 문자 파라미터 (정확하게의 tty
직렬 또는 의사 - 부착 회선 제어 tty 장치 ). 이것이 TCSETS / TCGETS에 전달 c_cc[VEOF]
된 termios
구조 ioctl
중 하나는 드라이버 동작에 영향을주기 위해 터미널 장치에 발행됩니다.
그것들을 보내는 일반적인 명령 ioctls
은 stty
명령입니다.
모든 매개 변수를 검색하려면 다음을 수행하십시오.
$ stty -a 속도 38400 보드; 줄 58; 열 191; 라인 = 0; intr = ^ C; 종료 = ^ \; 지우기 = ^ ?; 죽이기 = ^ U; eof = ^ D ; eol = <undef>; eol2 = <undef>; swtch = <undef>; 시작 = ^ Q; 중지 = ^ S; susp = ^ Z; rprnt = ^ R; 웨 라제 = ^ W; 다음 = ^ V; 플러시 = ^ O; 최소 = 1; 시간 = 0; -parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel iutf8 opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten 에코 echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
이 eof
매개 변수는 터미널 장치가 icanon
모드에 있을 때만 관련됩니다 .
이 모드에서 터미널 드라이버 (터미널 에뮬레이터가 아님) 는 문자 를 지우고 전체 줄을 지우는 입력 할 수 있는 매우 간단한 라인 편집기를 구현합니다 . 응용 프로그램이 터미널 장치에서 읽을 때까지는 아무것도 보이지 않습니다. 당신은 누르면 어떤 지점에서 반환을 마지막 포함한 전체 라인 문자 (기본적를, 터미널 드라이버는 또한 번역 에 터미널에 의해 전송 로 ).BackspaceCtrl-UReturnread()
LF
CR
ReturnLF
을 누르지 않고 지금까지 입력 한 내용을 보내려면 문자를 Enter입력 할 수 있습니다 eof
. 터미널 에뮬레이터로부터 해당 문자를 수신하면, 터미널 드라이버 는 행 의 현재 내용을 제출 하여 그 행을 수행하는 응용 프로그램 read
이 그대로 수신합니다 (그리고 후행 LF
문자를 포함하지 않음 ).
현재 행이 비어 있고 응용 프로그램이 이전에 입력 한 행을 완전히 읽은 경우 read
0 문자를 리턴합니다.
이는 파일 끝을 응용 프로그램으로 나타냅니다 (파일에서 읽을 때 더 이상 읽을 것이 없을 때까지 읽습니다). eof
문자를 보내면 응용 프로그램에서 더 이상 입력을 사용할 수 없기 때문에 문자 라고합니다 .
이제 현대 쉘 은 터미널 드라이버 내장 터미널보다 훨씬 고급 인 icanon
자체 라인 편집기 를 구현하기 때문에 프롬프트에서 터미널을 모드로 설정하지 않습니다 . 그러나 자신의 라인 편집기 에서 사용자를 혼란스럽게하지 않기 위해 ^D
캐릭터 (또는 터미널 eof
설정에 관계없이 )에 동일한 의미 ( eof
)를 부여합니다.
CTRL_D는 이것이 텍스트 스트림의 끝이라는 신호입니다. 파일을 끝내지 않고 입력 스트림을 입력하여 종료합니다. 또한 CTRL_D는 hexdump 도구로 찾을 수 있으므로 문자 또는 바이트를 나타내지 않습니다.
# cat >test.txt
asdf# hexdump -C test.txt
00000000 61 73 64 66 |asdf|
00000004
# ll test.txt
-rw-r--r-- 1 root root 4 Jan 21 11:55 test.txt