`\r`을 공백 문자로 처리하는 쉘

`\r`을 공백 문자로 처리하는 쉘

개인 프로젝트로서 Cygwin에서 실행되는 Windows 10과 함께 제공되는 일부 외부 파일을 정리하는 스크립트를 작성하려고 합니다. 나는 스크립트가 복사하여 붙여넣을 수 있기를 원합니다. 이를 위해서는 다양한 유형의 줄바꿈에 대한 저항력이 필요합니다. 특정 옵션을 설정할 때 sh공백을 공백으로 처리하는 기능을 제공하는 유사한 쉘이 있습니까?\r

이것은 이상한 일입니다. 대답은 아마도 "예, 이상한 일이고 어떻게 할 방법이 없습니다"로 귀결될 것입니다.

답변1

일반적으로 이는 실제 스크립트에서는 불가능합니다.

  1. 독립 실행형 실행 스크립트에는 사용할 인터프리터를 식별하는 shebang 줄이 있습니다.

    #!/bin/sh
    

    문제는 번역과는 상관없이,Sherbon 라인 자체끝 부분 앞에 캐리지 리턴이 포함됩니다. 이는 인터프리터를 찾을 수 없음을 의미합니다(문자 그대로 실행 가능성이 낮은 실행 파일 이름은 제외 $'sh\r'- Windows에서는 불법이라고 생각함).

  2. 실행 가능한 스크립트의 또 다른 유형은 실행 비트가 설정된 일반 텍스트 파일입니다.POSIX는 POSIX 쉘 명령 언어의 스크립트로 해석되어야 합니다.(호환되는 쉘 자체에서 호출되는 경우) 그러나 발견한 대로 이 쉘 언어는 캐리지 리턴을 데이터 바이트로 처리하므로 식별한 문제가 있습니다.


당신은 몇 가지 선택권이 있습니다. 하나는 단순히 실제 실행 가능한 스크립트를 포기하고 다른 언어의 인터프리터를 먼저 호출하는 것입니다. 당신은 Perl과 Python을 확인했으며 실제로 대부분의 스크립팅 언어는 현대적인 줄 끝 형식에 만족합니다. 스크립트를 perl cleanup.pl.

그러나 많은 관리 작업은 전통적인 쉘 언어에서 훨씬 더 쉬우며 여기에 요령이 있습니다. 각 줄을 주석으로 끝내십시오.

echo hello #
rm file.ext #
mv /path/other.fl /path/bin #

#역할은 모든 표준 셸(비대화형 컨텍스트에서)의 줄 끝에 주석을 추가합니다. 주석에는 주석에 적합한 요소인 캐리지 리턴 바이트가 포함되며 즉시 종료 개행 바이트로 끝납니다.

해시 값 앞에 공백이 있어야 한다는 것이 중요합니다.#한마디로아니요댓글을 시작했지만 단어의 일부입니다..

셸을 사용하여 이 스크립트를 직접 실행할 수 있습니다.

bash cleanup.sh
dash cleanup.sh
sh cleanup.sh

그러나 기존 셸 세션에서 명령을 입력하여 실행하는 경우 앞서 언급한 POSIX 스크립트도 작동합니다. 파일을 실행 가능하게 만든 다음

./cleanup.sh

사용하여 실행합니다.쉘이 생각하는 것이 무엇이든 POSIX 스크립트를 사용하는 것이 옳습니다..

일회성처럼 들리기 때문에 실행 가능하게 만들려고 노력할 가치가 없을 것이므로 sh cleanup.sh나에게는 충분할 것 같습니다.


이 상황에 대한 나의 솔직한 제안은 아마도 Powershell(또는 일괄 푸시)일 것입니다. 그러나 나는 그것이 당신이 원하는 것이 아니라는 것을 알고 있습니다. WSL은 또 다른 옵션입니다. WSL은 shebang 줄에서 캐리지 리턴을 자동으로 처리한 다음 주석을 사용하여 나머지 작업을 수행할 수 있습니다.

관련 정보