하드웨어 엄마, 소프트웨어 아빠 🛠️💻
[linux] #/bin/bash^M: bad interpreter: No such file or directory 본문
[linux] #/bin/bash^M: bad interpreter: No such file or directory
카페이나 (ft. ANDYLION) 2023. 9. 7. 15:45
개발을 하다 보면 알지 못하던 다양한 문제를 마주하게 된다.
어찌 보면 그 다양한 원인을 해결해 가는 것을 좋아하는 사람들이 개발자가 되는 것이 일반적이다.
이과생들의 특징이 답이 정해져 있는 문제를 풀어가는 과정을 즐기는 것이 아니겠는가?
윈도우 환경에서 코드를 작성하고 그것을 리눅스 환경에서 실행하려고 할 때
"^M: bad interpreter: No such file or directory"와 같은 문제가 발생한다.
윈도우에서 사용한 개행 문자가 리눅스에서는 인식되지 못해 발생하는 것이 원인이다.
그럼 이 문제는 어떻게 해결할 수 있을까?
다양한 방법이 있고, 리눅스 역시 ubuntu / fedora / CentOS 등 다양하기 때문에 모두 같은 방법으로 해결되지 않는다.
그럼 다양한 해결 방법에 대해 하나씩 알아가 보자.
1. vi/vim을 사용하여 ^M 삭제하기
가장 단순하면서 쉬운 방법이다.
- vi or vim -b [file_name]
- 파일을 열었다면 아래와 같이 개행문자들을 볼 수 있다. ^M을 모두 직접 제거한다.
$ vi -b test.sh
#!/bin/bash^M
^M
function_android_func() {^M
wget -O ${DDK_ROOT_DIR}/local/sdk/sdk-tools-linux.zip https://dl.google.com/android/repository/commandlinetools-linux-8512546_latest.zip^M
wget -O ${DDK_ROOT_DIR}/local/sdk/android-ndk-linux.zip https://dl.google.com/android/repository/android-ndk-r25-linux.zip^M
pushd ${DDK_ROOT_DIR}/local/sdk^M
unzip sdk-tools-linux.zip^M
cmdline-tools/bin/sdkmanager --sdk_root=${ANDROID_SDK} "platforms;android-33" "build-tools;33.0.0"^M
cmdline-tools/bin/sdkmanager --sdk_root=${ANDROID_SDK} "platforms;android-31" "build-tools;31.0.0"^M
cmdline-tools/bin/sdkmanager --sdk_root=${ANDROID_SDK} "platforms;android-30" "build-tools;30.0.0"^M
cmdline-tools/bin/sdkmanager --sdk_root=${ANDROID_SDK} "platforms;android-29" "build-tools;29.0.0"^M
cmdline-tools/bin/sdkmanager --sdk_root=${ANDROID_SDK} "platforms;android-28" "build-tools;28.0.0"^M
cmdline-tools/bin/sdkmanager --sdk_root=${ANDROID_SDK} "platforms;android-27" "build-tools;27.0.0"^M
cmdline-tools/bin/sdkmanager --sdk_root=${ANDROID_SDK} "platforms;android-26" "build-tools;26.0.0"^M
cmdline-tools/bin/sdkmanager --sdk_root=${ANDROID_SDK} "platforms;android-25" "build-tools;25.0.0"^M
cmdline-tools/bin/sdkmanager --sdk_root=${ANDROID_SDK} platform-tools^M
}^M
2. sed 명령어를 사용하여 개행문자 삭제하기
- sed -i 's/\r$//' [file_name]
- 아래와 같이 개행문자가 모두 삭제된 것을 확인할 수 있다.
$ sed -i 's/\r$//' test.sh
$ vi -b test.sh
#!/bin/bash
function_android_func() {
wget -O ${DDK_ROOT_DIR}/local/sdk/sdk-tools-linux.zip https://dl.google.com/android/repository/commandlinetools-linux-8512546_latest.zip
wget -O ${DDK_ROOT_DIR}/local/sdk/android-ndk-linux.zip https://dl.google.com/android/repository/android-ndk-r25-linux.zip
pushd ${DDK_ROOT_DIR}/local/sdk
unzip sdk-tools-linux.zip
cmdline-tools/bin/sdkmanager --sdk_root=${ANDROID_SDK} "platforms;android-33" "build-tools;33.0.0"
cmdline-tools/bin/sdkmanager --sdk_root=${ANDROID_SDK} "platforms;android-31" "build-tools;31.0.0"
cmdline-tools/bin/sdkmanager --sdk_root=${ANDROID_SDK} "platforms;android-30" "build-tools;30.0.0"
cmdline-tools/bin/sdkmanager --sdk_root=${ANDROID_SDK} "platforms;android-29" "build-tools;29.0.0"
cmdline-tools/bin/sdkmanager --sdk_root=${ANDROID_SDK} "platforms;android-28" "build-tools;28.0.0"
cmdline-tools/bin/sdkmanager --sdk_root=${ANDROID_SDK} "platforms;android-27" "build-tools;27.0.0"
cmdline-tools/bin/sdkmanager --sdk_root=${ANDROID_SDK} "platforms;android-26" "build-tools;26.0.0"
cmdline-tools/bin/sdkmanager --sdk_root=${ANDROID_SDK} "platforms;android-25" "build-tools;25.0.0"
cmdline-tools/bin/sdkmanager --sdk_root=${ANDROID_SDK} platform-tools
}
3. In vi [file_name], fileformat 설정하기
- vi [file_name]
- :set fileformat=unix
- wq
4. 마지막으로 fedora환경에서는 동작하지 않지만 ubuntu 사용자라면 가능한 설정 방법입니다.
- vi [file_name]
- :%s/^M//g
- wq
예전에 비해 많이 한가해지다보니 그 동안 해결했던 내용을 하나하나 정리해보고 있는데...
막상 그 때 해결했던 내용들이 기억이 안나네요.
이래서 항상 기록하는 습관이 중요하다는 걸 또 한번 느낍니다.
M: bad i^M: bad interpret
er: No such file or directorynterpreter: No such file or directory^M: bad interpreter: No such file or directory
'💻 3.앤디라이언의 소프트웨어 (IT재테크) > 개발 이야기' 카테고리의 다른 글
| [linux] 반응형 shell script 자동입력 (0) | 2023.09.07 |
|---|---|
| [linux] 파일 이름 변경 명령어 rename (0) | 2023.09.04 |
| [linux] 실시간 성능 모니터링을 위한 명령어 top (0) | 2023.09.04 |
| [linux] 프로세스 우선순위 지정 명령어 nice (0) | 2023.09.04 |
| Using cmd, start/stop App in Android Platform (0) | 2023.08.22 |
