head -c 3 sample.txt
프롬프트에서 사용자 이름 앞에 출력이 나타납니다.
Theuser@localhost:/home$
The
그 후에는 더 이상 인쇄할 수 없습니다 $
.
내 터미널이 왜 이러는 걸까요?
답변1
The
이후에 인쇄되지 않았습니다.$
왜 이렇게 되어야 할까요? head
먼저 인쇄한 후 쉘에서 다음 명령을 입력하라는 메시지를 표시합니다. 프롬프트가 별도의 줄에 나타날 것으로 예상하는 것이 다소 합리적이지만 여전히뒤쪽에(다음과 같은) The
.
head -c 3 sample.txt
The
나중에 개행 없이 정확하게 인쇄됩니다 e
. head
표준 출력(이 경우 터미널)에 3바이트를 인쇄하도록 요청 하면 정확히 3바이트를 얻게 됩니다. 그 안에 개행 문자가 없습니다.
일반적으로 echo
명령(예: )의 텍스트 출력은 개행 문자로 끝납니다. 명령이 종료된 후 쉘이 프롬프트를 인쇄할 때 개행 문자 바로 뒤에 프롬프트를 인쇄하므로 새 행의 시작 부분에 프롬프트가 표시됩니다.
귀하의 경우에는 그 뒤에 개행 문자가 없으므로 The
쉘이 터미널에 인쇄되면 프롬프트가 같은 줄에 나타납니다.
일부 쉘은 이것이 곧 일어날 것을 감지합니다. 귀하의 쉘은 분명히 그렇지 않습니다.
줄을 처리하는 도구는 해당 문자가 실제로 자신의 줄에 속하기 때문에 줄바꿈을 사용하여 인쇄합니다. 예를 들어 소스 데이터의 마지막 줄이 불완전한 경우(즉, 후행 줄 바꿈이 없는 경우) sample.txt
해당 줄을 무시하거나 그대로 인쇄하거나(줄 바꿈 없이) 수정(줄 바꿈 추가)하여 처리할 수 있습니다. ); 이는 도구와 그 성취에 따라 다릅니다.
완전한 행을 포함하는 것 sample.txt
뿐만 아니라 head -n
행을 처리하는 것에서도 완전한 행을 기대할 수 있습니다. 그러나 head -c
바이트를 다룰 때 인쇄할 마지막 바이트가 개행 문자라는 것을 미리 알지 않는 한 출력의 마지막 줄이 완료되었다고 가정하면 안 됩니다.
echo
나중에 인수 없이 호출하여 쉽게 개행 문자를 추가할 수 있습니다 head
.
head -c 3 sample.txt; echo
그러면 프롬프트가 거의 확실하게 별도의 줄에 표시됩니다. 이 개행 문자 echo
는 가 아니라 에서 온다는 점을 기억하세요 sample.txt
.
head
* 커서 이동 등을 포함하는 터미널 제어 시퀀스를 출력하는 경우는 예외입니다 . 이러한 시퀀스가 3바이트에 맞을 것이라고는 기대하지 않지만 일반적으로 파일에 해당 시퀀스가 포함되어 있고 터미널이 이를 이해하고 충분한 바이트를 요청하면 터미널이 이를 따릅니다. 이런 일이 발생하면 어디에서나 프롬프트를 볼 수 있습니다(또는 더 나쁘다)