존재하다이 맥락ed file < script
인쇄하고 오류 2로 종료하는 상황이 발생했는데 , ?
명령을 한 번에 입력하거나 붙여넣는 것이 잘 작동했습니다. 이는 한 줄 사이 script
에 한 줄씩 파일을 전달하는 쉘 프로세스가 있는 경우에도 잘 작동합니다. 따라서 명령이 불편한 시간에 나타나면 내 버전(MacOS 10.12의 버전)에 문제가 있는 sleep
것 같습니다 .ed
왜 ed는 수신한 명령을 처리할 준비가 될 때까지 표준 입력 읽기를 피하지 않습니까? 아니면 제가 상황을 잘못 이해한 걸까요?
오류 메시지는
?
별로 도움이 되지 않습니다.h
매뉴얼 페이지에 따르면 대화형 세션에서 오류 메시지를 입력하기 위해 입력할 수 있습니다. 그러나 입력이 TTY가 아닌 곳에서 오면 즉시 종료됩니다. 이 경우에도 오류 메시지를 받을 수 있는 방법이 있나요?이것이 알려진 문제입니까? 그렇다면 명령을 천천히 전달하는 것 외에 제안된 해결 방법이 있습니까? 어떤 버전의 ed가 영향을 받나요?
답변1
스크립트의 캐리지 리턴으로 인해 문제가 발생할 수 있습니다 ed
. 텍스트 일부를 복사하여 붙여넣어도 실행 중인 ed
프로세스로 전송되지는 않지만, 스크립트 파일에 있었다면 이것이 어떻게 ed
혼란을 초래할 수 있는지 이해할 수 있습니다.
GNU는 ed
"입력 파일이 손상되었거나 유효하지 않음을 나타냄"의 종료 상태 2로 종료됩니다. 이는 DOS 형식의 스크립트 파일일 수 있다는 추측을 지원합니다. 그러나 ed
macOS의 기본값은 BSD이며 ed
종료 코드는 설명서에 제대로 설명되어 있지 않습니다. (OpenBSD) 소스 코드를 보면 이 종료 코드를 유발하는 대부분의 오류는 실제로 스크립트 파일 읽기와 관련된 것으로 보입니다.
각 줄 바꿈 앞의 내용을 제거하려면 \r
(내부 편집을 수행함):
printf '%s\n' ',s/\r$//' 'wq' | ed -s file
예를 들어, Windows 편집기나 파일을 DOS 형식의 텍스트 파일로 저장하는 편집기에서 스크립트를 작성할 때 캐리지 리턴이 나타납니다.
질문 1: 나는 그것이 사실이라고 확신합니다.
ed
문제 2는 생성된 다소 간결한 진단 메시지 ( ?
대부분의 경우) 와 관련이 있습니다 . 이 함수를 호출하여 편집 스크립트를 시작 하면 오류 뒤에 입력한 것처럼 H
모든 오류가 일반 오류가 아닌 자세한 정보로 표시됩니다 . 각 줄 끝에 캐리지 리턴이 있으면 명령이 유효한 것으로 인식되지 않으므로 도움이 되지 않습니다.?
h
ed
H
질문 3: 저는 OpenBSD에서 GNU ed
(1.14.2)와 BSD를 사용했는데 "너무 빨리" 명령을 입력하여 발생하는 문제를 ed
본 적이 없습니다 .ed