Ed 스크립트는 천천히 입력할 때만 작동합니다.

Ed 스크립트는 천천히 입력할 때만 작동합니다.

존재하다이 맥락ed file < script인쇄하고 오류 2로 종료하는 상황이 발생했는데 , ?명령을 한 번에 입력하거나 붙여넣는 것이 잘 작동했습니다. 이는 한 줄 사이 script에 한 줄씩 파일을 전달하는 쉘 프로세스가 있는 경우에도 잘 작동합니다. 따라서 명령이 불편한 시간에 나타나면 내 버전(MacOS 10.12의 버전)에 문제가 있는 sleep것 같습니다 .ed

  1. 왜 ed는 수신한 명령을 처리할 준비가 될 때까지 표준 입력 읽기를 피하지 않습니까? 아니면 제가 상황을 잘못 이해한 걸까요?

  2. 오류 메시지는 ?별로 도움이 되지 않습니다. h매뉴얼 페이지에 따르면 대화형 세션에서 오류 메시지를 입력하기 위해 입력할 수 있습니다. 그러나 입력이 TTY가 아닌 곳에서 오면 즉시 종료됩니다. 이 경우에도 오류 메시지를 받을 수 있는 방법이 있나요?

  3. 이것이 알려진 문제입니까? 그렇다면 명령을 천천히 전달하는 것 외에 제안된 해결 방법이 있습니까? 어떤 버전의 ed가 영향을 받나요?

답변1

스크립트의 캐리지 리턴으로 인해 문제가 발생할 수 있습니다 ed. 텍스트 일부를 복사하여 붙여넣어도 실행 중인 ed프로세스로 전송되지는 않지만, 스크립트 파일에 있었다면 이것이 어떻게 ed혼란을 초래할 수 있는지 이해할 수 있습니다.

GNU는 ed"입력 파일이 손상되었거나 유효하지 않음을 나타냄"의 종료 상태 2로 종료됩니다. 이는 DOS 형식의 스크립트 파일일 수 있다는 추측을 지원합니다. 그러나 edmacOS의 기본값은 BSD이며 ed종료 코드는 설명서에 제대로 설명되어 있지 않습니다. (OpenBSD) 소스 코드를 보면 이 종료 코드를 유발하는 대부분의 오류는 실제로 스크립트 파일 읽기와 관련된 것으로 보입니다.

각 줄 바꿈 앞의 내용을 제거하려면 \r(내부 편집을 수행함):

printf '%s\n' ',s/\r$//' 'wq' | ed -s file

예를 들어, Windows 편집기나 파일을 DOS 형식의 텍스트 파일로 저장하는 편집기에서 스크립트를 작성할 때 캐리지 리턴이 나타납니다.

질문 1: 나는 그것이 사실이라고 확신합니다.

ed문제 2는 생성된 다소 간결한 진단 메시지 ( ?대부분의 경우) 와 관련이 있습니다 . 이 함수를 호출하여 편집 스크립트를 시작 하면 오류 뒤에 입력한 것처럼 H모든 오류가 일반 오류가 아닌 자세한 정보로 표시됩니다 . 각 줄 끝에 캐리지 리턴이 있으면 명령이 유효한 것으로 인식되지 않으므로 도움이 되지 않습니다.?hedH

질문 3: 저는 OpenBSD에서 GNU ed(1.14.2)와 BSD를 사용했는데 "너무 빨리" 명령을 입력하여 발생하는 문제를 ed본 적이 없습니다 .ed

관련 정보