Ctrl다음과 같이 일부 명령을 실행하고 명시적으로 + 를 제공하고 싶습니다 D.
ls;pwd;^D
불행히도 위의 방법은 작동하지 않습니다. 나는 또한 위에서 언급 한 것을 시도 \04
하고 0x4
대체했습니다 .^D
여기. 이것도 작동하지 않습니다. 이 목표를 어떻게 달성할 수 있나요? 또한 이는 다음과 어떻게 다른가요?
ls;pwd;exit
答え1
부분적으로 설명됨Stefan Chazeras의 답변, 관련 부분을 인용해 보겠습니다.
이제 현재 줄이 비어 있고 응용 프로그램이 이전에 입력한 줄을 완전히 읽었다면
read
0 문자가 반환됩니다.이것은 의미한다파일 끝응용 프로그램에 추가합니다(파일에서 읽을 때 더 이상 읽을 내용이 없을 때까지 계속 읽습니다). 이것이 바로
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
.