작성
·
276
0
선생님 안녕하세요
좋은 강의 감사합니다.
2-4 강의에서 select fruit 하는 부분에서 오류가 생겨서 질문 드립니다.
참고로 저는 리눅스가 아니라 docker on window를 사용하고 있습니다.
윈도우 상에서 bash 를 사용하는데 오류가 발생하는 것 같은데 해결방법을 모르겠어서요
저의 select_fruit.sh 는 아래와 같고요
FRUIT=$1
if [ $FRUIT == APPLE ];then echo "You selected Apple!"
elif [ $FRUIT == ORANGE ];then echo "you selected Orange!"
elif [ $FRUIT == GRAPE ];then echo "You selected Grape!"
else echo "You selected other fruits!"
fi
이것을 git bash 상에서 돌려보면 잘 돌아갑니다.
그런데, 윈도우 cmd에서 bash 로 돌리면 apple과 orange에 대해서도 다른 과일을 골랐다는 오류가 뜨고요
그리고 airflow dag을 실행시켜도 같은 오류가 뜹니다.
git bash에서 제대로 결과가 나오는걸 보면 sh 파일 자체에는 문제가 없는것 같은데, airflow 상에서 실행이 안되는 이유가 무엇일까요 ㅠ
nathan님
해당 파일을 윈도우 환경에서 작성하셨죠?
아무래도 Linux와 윈도우의 줄넘김 방식의 차이 때문에 발생하는 문제 같습니다.
윈도우즈에서는 줄 넘김을 할 때(엔터키) CR과 LF 라는 특수문자가 등장합니다.
즉 \r 로 표현되는 Carriage Return, \n 으로 표현되는 Line Feed 가 합쳐져서 하나의 줄넘김으로 인식합니다.
반면 Linux 환경에서는 기본적으로 \n을 줄 넘김으로 인식합니다.
따라서 윈도우 상에서 bash 명령으로 쉘을 제대로 수행하려면 줄 넘김을 모두 \n 로 작성하셔야 합니다. 다만 윈도우의 기본 에디터인 notepad 로는 저런 특수문자를 다루기가 쉽지 않기 때문에 무료 에디터 툴인 notepad++ 을 설치해서 보면 특수문자를 볼 수 있습니다.
아래는 윈도우의 notepad 에서 작성한 후 notepad++ 에 붙여넣은 것입니다.
언급했듯이 CR/LF 가 붙어있는 모습을 볼 수 있습니다.
참고로 특수기호 표시는 보기 > 기호보기 > 특수문자 표시에서 활성화 할 수 있어요
그리고 아래는 \r\n --> \n 로 바꾼 것입니다.
참고로 바꾸기는 컨트롤 f 누른 후 아래처럼 입력하셔서 바꿀 수 있어요.
이렇게 바꿔놓고 수행해보면 제대로 된 결과를 얻을 수 있을꺼에요 .
한번 해보시고 결과 알려주세요 ^^