Ctrl + D(EOF)를 사용하여 명령을 추적하는 방법

Ctrl + D(EOF)를 사용하여 명령을 추적하는 방법

Ctrl다음과 같이 일부 명령을 실행하고 명시적으로 + 를 제공하고 싶습니다 D.

ls;pwd;^D

불행히도 위의 방법은 작동하지 않습니다. 나는 또한 위에서 언급 한 것을 시도 \04하고 0x4대체했습니다 .^D여기. 이것도 작동하지 않습니다. 이 목표를 어떻게 달성할 수 있나요? 또한 이는 다음과 어떻게 다른가요?

ls;pwd;exit

답변1

부분적으로 설명됨Stefan Chazeras의 답변, 관련 부분을 인용해 보겠습니다.

이제 현재 줄이 비어 있고 응용 프로그램이 이전에 입력한 줄을 완전히 읽었다면 read0 문자가 반환됩니다.

이것은 의미한다파일 끝응용 프로그램에 추가합니다(파일에서 읽을 때 더 이상 읽을 내용이 없을 때까지 계속 읽습니다). 이것이 바로 eof문자라고 불리는 이유입니다. 문자를 보내면 애플리케이션에서 더 이상 입력이 가능하지 않다는 것을 알 수 있기 때문입니다.

icanon최신 쉘은 이제 자체 구현을 구현하기 때문에 프롬프트가 표시될 때 터미널을 모드로 설정하지 않습니다. 라인 편집기이는 내장된 터미널 드라이버보다 훨씬 더 발전된 기능입니다. 그러나 그들 자신의라인 편집기, 사용자의 혼란을 피하기 위해 ^D문자(또는 eof터미널의 모든 설정)에 동일한 의미(표현 eof)를 부여합니다.

마지막 줄에는 더 많은 설명이 필요합니다. ~에서Bash 라인 편집기 readline에 대한 문서:

end-of-file(보통 카드뮴)
파일 끝 문자(예: )를 나타내는 문자 설정입니다 stty. 줄에 문자가 없고 점이 줄의 시작 부분에 있을 때 문자를 읽으면 Readline은 이를 입력의 끝으로 해석하고 EOF를 반환합니다.

따라서 readline(및 대부분의 다른 쉘)의 경우 Ctrl- D줄 시작 부분에 EOF가 있습니다. 따라서 Ctrl줄 끝에 -를 추가하더라도 EOF로 간주되지 않습니다.D

EOF로 인해 대화형 셸이 종료되는지 여부는 다른 질문입니다. Bash의 경우 이는 IGNOREEOF변수와 옵션으로 set -o ignoreeof제어 됩니다. 이것변수 문서화설명하다:

EOF 문자를 유일한 입력으로 받을 때 쉘의 동작을 제어합니다. 설정된 경우 이 값은 쉘이 종료되기 전에 입력 행에서 첫 번째 문자로 읽을 수 있는 연속 EOF 문자 수를 나타냅니다. 변수가 존재하지만 숫자 값이 없거나 값이 없는 경우 기본값은 10입니다. 변수가 존재하지 않으면 EOF는 쉘 입력의 끝을 나타냅니다. 이는 대화형 쉘에서만 작동합니다.

예:

bash-5.0$ IGNOREEOF=
bash-5.0$ <Ctrl-D> Use "exit" to leave the shell.
bash-5.0$ <Ctrl-D> Use "exit" to leave the shell.
bash-5.0$ <Ctrl-D> Use "exit" to leave the shell.
bash-5.0$

7번 정도 더 하다가 결국 그만뒀어요.


이건 정말 아무 소용이 없을 것 같아요. 이 명령이 끝날 때 셸을 종료하려면 를 사용하면 됩니다 exit.

관련 정보