다음 두 파일을 확인하세요.
제 생각에는 완전히 똑같은 것 같지만, 파일 1의 크기는 41바이트이고 파일 2의 크기는 44바이트입니다.
이제 3개의 추가 문자는 신경쓰지 않겠습니다. 그러나 이러한 문자도 이상한 오류를 일으킬 것이라고 생각합니다. 이 파일을 복제하고 실행하면 파일 1은 정상적으로 실행되지만 파일 2는 라인 3에서 오류를 반환합니다. ./BasicCheck.sh: 3행: cd: case0: 해당 파일이나 디렉터리가 없습니다."
그렇다면 이 추가 문자는 무엇입니까? 왜 오류가 발생합니까? 이러한 오류를 수정하려면 어떻게 해야 합니까?
내 생각에는 그것들이 줄바꿈일 것입니다. 아마도 파일 1에는 Linux 기반 줄바꿈이 있고 파일 2에는 Windows 기반 줄바꿈이 있을 수 있습니다. 맞아? 왜 그런 오류가 발생합니까?
답변1
이 file
명령은 문제를 지적합니다.
% file file*
file1: Bourne-Again shell script, ASCII text executable
file2: Bourne-Again shell script, ASCII text executable, with CRLF line terminators
두 번째 스크립트는 "DOS" 형식입니다. 따라서 예상대로 작동하지 않습니다. 지금 으로 변환하면 dos2unix
결과는 동일합니다
% dos2unix file2
dos2unix: converting file file2 to Unix format ...
% ls -l file1 file2
-rw-r--r-- 1 sweh sweh 41 Mar 19 11:23 file1
-rw-r--r-- 1 sweh sweh 41 Mar 19 11:25 file2
Unix 명령과 함께 DOS 형식 파일을 사용하려고 하면 각 줄 끝에 control-M이 붙습니다. 그래서 다음과 같은 줄
a=b
true를 a
b로 설정한 다음 control-M을 사용하여 간략하게 설정합니다 ^M
.
a=b^M
모든 명령은 비슷하게 영향을 받습니다. 예를 들어 두 문자 명령이 포함된 간단한 줄은 ls
존재하지 않는 세 문자 명령을 실행하려고 시도합니다.ls<control-M>