일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- server
- HTTP
- Static
- 자바
- 서버
- RDBMS
- Swagger
- JPA
- 스프링RESTAPI
- application.yml
- HTTP상태코드
- JWT
- 어노테이션
- 인텔리제이오류
- 오버라이딩
- 스프링
- spring
- SQL
- 시큐리티
- 쿼리
- restAPI
- 스프링오류
- 스웨거
- MariaDB
- Java
- 상태코드
- SpringSecurity
- 의존성주입
- API
- 스프링시큐리티
- Today
- Total
취뽀몽
[Server] /bin/sh^m: bad interpreter: no such file or directory 해결 방법 본문
새로 추가된 배치가 있어서 젠킨스에 등록하기 전 수동으로 확인해보기 위해 셸스크립트를 실행했다.
셸스크립트 이름을 밝힐 수는 없으니... 편의성을 위해 test라고 지칭하겠다.
리눅스 환경에서 ./test.sh 를 실행하니 아래와 같은 오류가 발생했다.
-bash: ./test.sh: /bin/sh^m: bad interpreter: no such file or directory
찾아보니 이 오류는 스크립트 파일의 줄 끝 문자 형식 때문에 발생한다고 한다.
윈도우에서 작성된 텍스트 파일은 줄 끝 문자가 CRLF (\\r\\n)인 반면,
유닉스 기반 시스템(예: Linux, macOS)에서는 줄 끝 문자가 LF (\\n)이다.
오류 메시지의 ^M은 캐리지 리턴 문자(\\r)가 포함되어 있음을 나타내기 때문에
텍스트 파일의 줄 끝 문자를 유닉스 형식으로 변환해야 한다.
형식을 변경하기 전, 현재 형식을 확인하기 위해 다음과 같은 명령어를 입력해준다.
file test.sh
이번에 신규로 생성한 배치 셸 스크립트로 ASCII test, with CRLF line terminators 라고 출력된다.
윈도우 형식임을 나타내는 것이다.
그럼 기존에 존재하는 다른 배치 셸 스크립트의 형식은 어떻게 출력될까?
신규로 만든 셸스크립트와 형식이 다른 걸 확인할 수 있다.
ASCII test가 바로 유닉스 형식이다.
그럼 이제 test.sh(신규 생성 배치 셸 스크립트)을 유닉스 형식으로 변환해보자.
vi test.sh
vi 편집기를 열어서,
:set fileformat=unix
를 입력해준다. 유닉스 형식으로 파일 형식을 지정해주는 것이다.
이후 :wq로 저장하고 vi 편집기를 빠져나오면,
저장되는 것을 확인할 수 있다.
이제 다시 배치를 실행해주면 정상적으로 실행 가능하다!
셸 스크립트를 처음 만드는 건 아닌데... 이번에 처음 해당 오류를 보면서 해결한 내용을 공유하고 싶었다.
의외로 많이 발생하는 것 같으니 해결 방법을 잘 기억해둬야겠다!
'Server' 카테고리의 다른 글
[Server] 멀티프로세스와 멀티스레드 (0) | 2024.06.27 |
---|---|
[Server] 젠킨스 job Scheduling (Batch) 설정 방법 (0) | 2024.06.12 |
[Server] 컨텍스트 스위칭 오버헤드 (0) | 2024.05.29 |
[Server] 리눅스 서버 통신 확인 방법 (0) | 2024.05.05 |
[Server] Address localhost:10xx is already in use (0) | 2024.03.25 |