Stack Overflow에 댓글을 남겨주세요.PowerShell Core는 Linux 환경에서 CRLF 줄 끝이 있는 ps1 파일을 처리할 수 있나요?Shebang을 사용하는 실행 파일은 인용에 따라 LF 줄 끝만 사용해야 한다고 주장합니다.오라일리의 책. 여기서 일화적인 증거shebang 라인은 cr-lf와 작동하지 않습니다이것을 증명하는 것 같습니다.
그러나 이것이 공식적인 *nix 요구 사항입니까, 아니면 단지 하나의 플랫폼에서의 동작입니까? 어딘가에 문서화되어 있습니까? 확실히 주변에 방법이 없나요(예: #
줄 끝 앞에 추가 내용을 추가하는 등)?
즉, PowerShell 스크립트가 크로스 플랫폼 사용을 위한 것이라면 LF 줄 끝(현재 최신 PowerShell에서 구현할 수 있음)으로 제한됩니다. 바라보다PowerShell 스크립트용 shebang을 사용하는 것이 가장 좋습니까?여기에도 있습니다PowerShell 스크립트에서 shebang을 어떻게 사용하나요?스택 오버플로에.
답변1
POSIXly에서는 개행 문자가 유일한 개행 문자입니다.
그리고 해시뱅 라인은 POSIX에 의해 지정되지 않으며 다양한 POSIXy와 Unixy 시스템 간에도 구현 차이가 있으므로 Windows 호환으로 설계된 일부 시스템에서는 해시뱅 라인을 독점적으로 처리할 수 있습니다. (이것을 시도한 지 오랜 시간이 지났지만 Cygwin이 적어도 한 번은 CRLF 수정을 수행했다는 인상을 받았습니다. 어느 정도는 반드시 그런 것은 아닙니다.)
(그리고 hashbang 라인을 처리하는 Perl 인터프리터가 있습니다.그 자체, 커널이 그렇지 않은 경우. )
#
일반적으로 아니요. CR을 방지하기 위해 주석 태그를 사용하는 것에 의존할 수는 없습니다 . 예를 들어 Linux에는 다음과 같은 해시뱅 줄이 있습니다.
#!/bin/bash#[CR]
단일 인수(및 파일 이름)로만 실행 되며 bash
"파일을 찾을 수 없음" 오류가 발생할 수 있습니다.#[CR]
하지만 내 Mac과 같은 일부 시스템에서는 작동합니다.https://www.in-ulm.de/~mascheck/various/shebang/서로 다른 시스템 간의 해시뱅 처리 차이점 표를 참조하세요.
답변2
POSIX 정의(https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html)
3.403 텍스트 파일
0개 이상의 문자로 구성된 파일을 포함합니다.철사. 이 줄에는 NUL 문자가 포함되지 않으며 <newline> 문자를 포함하여 {LINE_MAX}바이트보다 길 수 없습니다. POSIX.1-2017은 텍스트 파일과 바이너리 파일을 구분하지 않지만(ISO C 표준 참조) 많은 유틸리티는 텍스트 파일에서 작동할 때 예측 가능하거나 의미 있는 출력만 생성합니다. 이러한 제한이 있는 표준 유틸리티는 항상 STDIN 또는 INPUT FILES 섹션에 "텍스트 파일"을 지정합니다.
그리고
3.206라인
0개 이상의 <newline>이 아닌 문자와 종료 <newline> 문자의 시퀀스입니다.
캐리지 리턴은 줄 끝의 일부가 아닙니다. "<newline>이 아닌 문자"입니다.