쉘 스크립트의 마지막 줄에 개행 문자가 없습니다.

쉘 스크립트의 마지막 줄에 개행 문자가 없습니다.

uptime파일 끝에 개행 문자가 없어도 쉘 스크립트(아래)의 마지막 명령줄이 성공적으로 실행되는 이유는 무엇입니까 ?

예를 들어:

root@jcdb:/tmp# 
root@jcdb:/tmp# 
root@jcdb:/tmp# cat dp
date
pwd
uptimeroot@jcdb:/tmp# 
root@jcdb:/tmp# 
root@jcdb:/tmp# 
root@jcdb:/tmp# ./dp
Wed Jun  6 16:27:26 EAT 2018
/tmp
  4:27pm  up 1 day, 17:25,  2 users,  load average: 0.39, 0.40, 0.41
root@jcdb:/tmp# 
root@jcdb:/tmp#

답변1

쉘이 쉘 스크립트를 읽을 때, 스캔 코드는 종료 개행 문자가 없더라도 스크립트 끝에 있는 마지막 단어를 승인합니다.

이것이 효과입니다쉘이 입력에서 토큰을 인식하는 방법에 관한 POSIX 표준의 첫 번째 규칙:

입력 끝이 인식되면 현재 토큰(있는 경우)을 구분해야 합니다.

실제로 현재 토큰이 여기에서 구분되어 있다고 말합니다. 이는 스크립트의 마지막 단어와 종료되지 않는 줄의 나머지 부분이 오류를 일으키거나 쉘을 코드에 넣는 대신 인터프리터에 대한 입력으로 허용된다는 의미입니다. 탐험되지 않은 정의된 상태.


댓글에는 편집자가 인용되어 있습니다 vi. 표준 vi편집기는 마지막 줄이 개행 문자로 끝나지 않는 파일을 편집할 수 있습니다. 그러나 버퍼를 파일에 쓸 때 버퍼의 마지막 줄은 개행 문자로 종료됩니다(빈 파일을 저장할 때 개행이 명시적으로 허용되지 않는 경우 제외). 표준 편집기에서도 마찬가지입니다 ex.

입력 파일

입력 파일은 텍스트 파일이어야 하거나 {LINE_MAX}-1바이트 보다 길지 않고 NUL문자를 포함하지 않는 불완전한 마지막 줄을 제외하고는 텍스트 파일이어야 합니다. 기본적으로 불완전한 마지막 줄은 후행으로 처리됩니다 <newline>. 구현에서는 파일의 다른 형식을 편집하도록 선택할 수 있습니다 ex.

편집기에는 종료되지 않은 마지막 줄을 유지해야 하는지 여부를 결정하는 vim설정이 있습니다 . eol기본 동작은 마지막 줄을 종료하는 것입니다. 에서 확인 :help eolvim

표준 편집기의 입력은 ed텍스트 파일이어야 합니다. 즉, 마지막 줄이 제대로 끝나지 않은 파일을 편집하는 경우(텍스트 파일이 아닌 경우) 기술적으로 지정되지 않음을 의미합니다. OpenBSD에서는 ed종료되지 않은 텍스트 파일을 열 때 편집기에 "새 줄 추가"가 표시됩니다.

입력 파일

입력 파일은 텍스트 파일이어야 합니다.

관련 정보