인프런 커뮤니티 질문&답변

nathan님의 프로필 이미지
nathan

작성한 질문수

Airflow 마스터 클래스

2-4 fruit operator 관련 오류 질문

작성

·

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 상에서 돌려보면 잘 돌아갑니다.

깃 성공.PNG

 

그런데, 윈도우 cmd에서 bash 로 돌리면 apple과 orange에 대해서도 다른 과일을 골랐다는 오류가 뜨고요

 

오류1`.PNG

그리고 airflow dag을 실행시켜도 같은 오류가 뜹니다.

에어 오류1.PNG에어오류2.PNG

 

git bash에서 제대로 결과가 나오는걸 보면 sh 파일 자체에는 문제가 없는것 같은데, airflow 상에서 실행이 안되는 이유가 무엇일까요 ㅠ

답변 1

0

김현진님의 프로필 이미지
김현진
지식공유자

안녕하세요 nathan 님

일단 nathan님이 말씀하신 증상은 저도 확인했습니다. 원인은 좀 더 확인해봐야 할듯한데 테스트해보고 다시 남겨드릴께요.

김현진님의 프로필 이미지
김현진
지식공유자

nathan님

해당 파일을 윈도우 환경에서 작성하셨죠?

아무래도 Linux와 윈도우의 줄넘김 방식의 차이 때문에 발생하는 문제 같습니다.

 

윈도우즈에서는 줄 넘김을 할 때(엔터키) CR과 LF 라는 특수문자가 등장합니다.

즉 \r 로 표현되는 Carriage Return, \n 으로 표현되는 Line Feed 가 합쳐져서 하나의 줄넘김으로 인식합니다.

반면 Linux 환경에서는 기본적으로 \n을 줄 넘김으로 인식합니다.

 

따라서 윈도우 상에서 bash 명령으로 쉘을 제대로 수행하려면 줄 넘김을 모두 \n 로 작성하셔야 합니다. 다만 윈도우의 기본 에디터인 notepad 로는 저런 특수문자를 다루기가 쉽지 않기 때문에 무료 에디터 툴인 notepad++ 을 설치해서 보면 특수문자를 볼 수 있습니다.

아래는 윈도우의 notepad 에서 작성한 후 notepad++ 에 붙여넣은 것입니다.

언급했듯이 CR/LF 가 붙어있는 모습을 볼 수 있습니다.

 

 

image

참고로 특수기호 표시는 보기 > 기호보기 > 특수문자 표시에서 활성화 할 수 있어요

그리고 아래는 \r\n --> \n 로 바꾼 것입니다.

 

image

참고로 바꾸기는 컨트롤 f 누른 후 아래처럼 입력하셔서 바꿀 수 있어요.

image

이렇게 바꿔놓고 수행해보면 제대로 된 결과를 얻을 수 있을꺼에요 .

image

한번 해보시고 결과 알려주세요 ^^

 

nathan님의 프로필 이미지
nathan

작성한 질문수

질문하기