내가 읽고있다 "UNIX 시간 공유 시스템Dennis M. Ritchie 및 Ken Thompson” 논문과 표준 입력/출력 리디렉션의 예로서 ed 편집기의 예를 제공합니다.
이 명령은
ed <script
스크립트를 편집기 명령 파일로 해석하므로 "<script
"는 "에서 입력을 받는다는 의미입니다script
.
그러나 vim을 사용하여 동일한 작업을 시도하면 "입력을 읽는 중 오류가 발생했습니다"라는 오류 메시지가 나타납니다.
[m@localhost rough]$ vim t2 <t
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.
왜 그럴까요?
답변1
ed
그리고 ex
는라인 편집기. 텍스트 파일의 줄로 구동할 수 있는 사용자 인터페이스가 있습니다.
vi
VIM과 같은 모든 클론전체 화면 편집기. 사용자 인터페이스는 입력 및 출력을 텍스트 파일 라인으로 처리하지 않습니다. 입력은 단일 문자 및 줄로 그룹화되지 않은 일련의 문자입니다. 출력은 비디오 터미널에 그리기 위한 단일 문자와 이스케이프 및 제어 시퀀스입니다.
모델은 다음과 같습니다사용자 입력/출력텍스트 파일은 GUI 프로그램은 물론 대화형 전체 화면 TUI 프로그램에 매핑되지 않기 때문입니다.
당신이 얻는 행동은 프로그램마다 다릅니다. 일부 전체 화면 TUI 프로그램은 표준 입력이 터미널이 아니라는 것을 인식하고 nvi
이와 같이 중단합니다. VIM과 같은 다른 도구는 경고하지만 비터미널 입력 파일을 터미널 입력으로 처리하므로 입력을 스크립트 명령으로 처리하려는 사람들에게 이상한 동작이 발생할 수 있습니다. 예를 들어 다른 것들은 less
사용자 인터페이스를 위해 터미널 장치를 명시적으로 열고 표준 I/O(입력 부분)를 사용하지 않습니다. 대부분의 쉘과 같이 비대화형 모드로 전환되는 일부 쉘도 있습니다(대화형 사용자 인터페이스는 단순한 라인 모드가 아님).
1974년에 작성된 Unix 관련 논문은 라인 모드 사용자 인터페이스와 전체 화면 사용자 인터페이스의 차이점을 설명하는 좋은 지침이 아닙니다. George Coulouris의 첫 번째 비디오 터미널 Unix 편집기는 em
아마도 1년 후에 등장했을 것입니다. 앞으로는 자체 명령줄 편집 기능을 갖춘 쉘인 termcap과 그래픽이 아닌 특수 문자를 사용하는 줄 규칙 기본값도 있을 것입니다.