파일 내용은 응용 프로그램으로 구성됩니다.

파일 내용은 응용 프로그램으로 구성됩니다.

나는 그것을 연주하고 싶다 find -fprintf. 무엇을 하는지 모른다면 이름을 지정한 파일에 쓰는 것과 같습니다 -fprintf.-printf

이제 다음과 같은 명령을 실행하면:

find -maxdepth 1 -type d  -fprintf output "%p\b\n"

output나는 ( vim거의 모든 텍스트 편집기를 사용하여) 다음을 얻습니다 .

.^H
./directory-1^H
./directory-2^H
./directory-3^H

^H백스페이스 문자인 것으로 알고 있습니다 . 시작 :outputless

./directory-
./directory-
./directory-

따라서 질문은 다음과 같습니다.

  1. vim다른 텍스트 편집기(시도 nano및 시도 emacs)는 앞에 있는 문자를 삭제하여 설명하지 않고 백스페이스 키를 표시하지만 less백스페이스 키를 표시합니까?
  2. 편집기가 \n개행 문자 대신 문자를 인쇄하지 않는 이유는 무엇입니까?
  3. 백스페이스 키를 인쇄하는 것과 키보드의 백스페이스 키를 누르는 것의 차이점은 무엇입니까(키보드의 백스페이스 키를 누르면 실제로 문자가 삭제됩니다)?

어디에서나 SSH를 사용하지 않고 내 컴퓨터(노트북)에서 실행합니다. konsole 및 tmux와 함께 GNU/Linux Ubuntu 16.04 LTS를 사용합니다.

답변1

vim 및 기타 텍스트 편집기(nano 및 emacs 사용)에서 백스페이스 키를 해석하지 않고 앞의 문자를 삭제하여 표시하지만 그보다 적은 이유는 무엇입니까?

그들은 왜 이런 일을 하는가? FWIW, 브라우저도 마찬가지입니다 :-)

$ printf "<html>foo\bbar</html>" > /tmp/foo.html
$ firefox /tmp/foo.html

*foo*미니 마크다운 이나 와 같이 편집자가 해석해야 하는 다른 유형의 마크업이 있습니까 **bar**?

백스페이스 키는 이전 문자를 '삭제'할 뿐만 아니라 less대략적인 형식 지정 문자 역할도 한다는 점에 유의하세요. 는 굵은 글씨로 인쇄되고 x\bx밑줄이 그어집니다(일부 터미널에서는 다른 색상으로 인쇄됩니다).xx\b_

printf "H\b_e\b_r\b_e\b_'s\bs Johnny!" | less

편집기가 줄 바꿈 대신 \n 문자를 인쇄하지 않는 이유는 무엇입니까?

그들은 이것을 할 수 있습니다. 예를 들어 :set listin 을 사용하면 vi줄 바꿈은 로 인쇄되고 $탭은 으로 인쇄됩니다 ^I.

백스페이스를 인쇄하는 것과 키보드의 백스페이스 키를 누르는 것의 차이점은 무엇입니까(키보드의 백스페이스 키를 누르면 실제로 문자가 삭제됩니다)?

하드형 터미널(종이에 인쇄)에서 백스페이스를 인쇄하면 캐리지가 왼쪽으로 한 위치 이동하므로 다음 문자는씌우다, 이미 종이에 있는 내용을 삭제하는 대신. 유리(CRT) 및 아날로그 터미널에서 위치를 왼쪽으로 이동하고 문자를 쓰면 문자를 완전히 대체하므로 "지우기" 효과가 있습니다. 그러나 \b그 자체로는 아무것도 삭제되지 않습니다. not printf "123\b\n"인쇄됩니다 .12312

후자는 일부 입력 문자를 편집/제어 명령으로 해석하는 tty 드라이버의 기능입니다( 전체 목록은 erase, werase, intr, kill-- 참조 stty(1)또는 termios(3)매뉴얼 페이지 참조).

백스페이스 키도 작동합니다아니요항상 \b/ ^H(BS) 문자를 생성합니다. 대부분의 경우 \x7f/ ^?(DEL) 입니다 .

하지만 원하는 값으로 설정할 수 있습니다.

$ stty erase '#'

지금을 클릭하면 #unix v7에서와 마찬가지로 이전 문자가 삭제됩니다.

답변2

파일 내용은 응용 프로그램으로 구성됩니다.

Unix 디자인의 특징 중 하나는 파일이 구별되지 않은 바이트 시퀀스이며 이를 원하는 대로 해석하는 것은 응용 프로그램에 달려 있다는 것입니다. 응용 프로그램은 파일 내용을 다르게 해석할 수 있고 해석하며, 그렇게 하면 결과가 발생하게 됩니다.

VIM은 Single Unix 사양의 개념에 따라 파일 내용을 해석합니다.텍스트 파일는 문자로 끝나고 문자가 포함되지 않은 0개 이상의 줄로 구성된 파일 입니다. 인쇄할 수 없는 문자를 다양한 인쇄 가능한 표현으로 변환하지만 개념의 일부이기 때문에 항상 줄 끝입니다.

다른 유틸리티는 파일 내용을 다르게 해석합니다. 한 시리즈는 파일 내용을 Teletype Model 37(TTY-37) 출력 데이터 스트림으로 해석합니다. 이 시리즈 에는 less, more, most, ul, colcrt, 비기본 모드 등 여러 가지 전통적인 Unix 및 GNU 프로그램이 포함되어 있습니다. 이 해석에서 캐릭터는 (개념적) 프린트 헤드를 한 위치 뒤로 이동하고ncalgrotty불다이전에는 무엇이 있었습니까? 이러한 프로그램은 종이에 잉크를 사용한 물리적 TTY-37이 아니기 때문에 재입력이 무엇을 의미하는지에 대한 자체 아이디어를 소프트웨어에 구현합니다. 중복 인쇄로 인해 굵게 및 밑줄 속성을 사용하거나, 한 문자를 다른 문자로 완전히 바꾸거나, 문자를 결합하거나, 문자를 전혀 바꾸지 않으려는 시도가 발생할 수 있습니다.

추가 읽기

관련 정보