Log 파일들을 분석할 일이 있어서 여러 서버에서 Log 파일을 가져오는 Shell을 작성하고 있었다.

다른 Shell Script를 참조로 아래와 같이 작성하였고
while read host
do
  ....
done < host.txt

while loop이 잘 도는 지 체크해 보려고 echo로 확인해 보면 잘 실행되었다.

그래서 원하는 script를 추가 하였을 경우에는 loop이 실행되지 못하고 한 번 실행 한 후 바로 멈추는 것이었다.

너무 이상한데 마침 SSH 인증 관련 문제가 있어서 그 문제떄문이려니 해보니 그것도 아니다..

그래서 인터넷을 찾아 보니 아래 페이지가 TIP을 주었다.

http://stackoverflow.com/questions/5626374/while-read-line-do-and-grep-problems

마침 내가 작업하려는게 host 파일들에 접속해서 파일을 받아 오는 것이었는데..
파일 받아 올때 파일 에 있는 CRLF 가 while loop을 exist 하는 것이었다.

결국 shell 내에서 array를 선언한 후 아래와 같이 수정하여 실행을 하니 정상적으로 수행되었다.

HOST_LIST=( HOST1 HOST2 .. )

for host in "${HOST_LIST[@]}"

...

done

Shell이 빨라서 좋은 데 이렇게 전혀 생각도 못했던 부분에서 문제가 생기면 시간을 너무 잡아 먹어서 .. 좀..
뭐 어쨋든.. rsync 할 떄 CPU가 올라 가는 부분을 제외하면 거의 대 부분의 이슈는 해결 된 듯..

rsync 이슈도 googling 해보니 -c 옵션을 사용할 경우 파일 Checksum을 실행 하여 파일 COPY를 한 다고 하니,
이 부분을 제거하면 문제가 없을 듯 하다.
어차피 내가 지금 짜고 있는 건 파일 전체를 다운 받아야 하는 Code 이니깐.



'개발자세상 > Shell 관련' 카테고리의 다른 글

첫번째 하위 폴더의 폴더 개수 구하기  (0) 2014.09.11
텍스트 프로세싱  (0) 2014.07.12
Shell script debug ( -x )  (1) 2013.08.04
Shell 에서 FTP uploading check  (0) 2013.03.21
공용키 기반 인증  (0) 2010.01.26
Posted by headiron
,