2013-10-21 3 views
-4

누구나 read i이 사용 된 부분을 설명 할 수 있습니까? i은 어디에서 왔습니까?bash 쉘 스크립트에 관한 설명

scp -i ~/.ssh/id_rsa.sample [email protected]:ready/$2/*.zip ./$2 > slate.out 2>&1 

ls -1 $2/* > curr.lst 2>/dev/null 

while 
read i 
do 
    if 
    test -e ../done/"$i" 
    then 
     diff "$i" ../done/"$i" >/dev/null 2>&1 
    if 
     test $? -eq 0 
    then 
     rm "$i" 
    fi 
    fi 
done < curr.lst 
+2

이에 대한 간단한 대답은 ** 없습니다. **이 스크립트의 배쉬, scp, diff 및 기타 모든 부분에 대한 많은 설명서가 있습니다. 구문의 일부에 대한 * 구체적인 * 질문이있는 경우 질문을 수정하여 그렇게 말하십시오. –

+0

나는 이것이 일종의 요구이지만, 나는 심하게 붙어있다. 그리고'read i'가 사용되는 부분은'i'가 어디서 왔는지를 알아내는 것입니다. –

+0

read 명령이 마지막에 지정한 파일 설명자에서 데이터를 읽는 중입니다 ... – Teja

답변

4

이 구문에 배치됩니다 "curr.lst"에서 각 행에 대해 이루어진다. 내부 루프를 생략함으로써 단순화 해 봅시다 :

while 
read i 
do 
    # Process i 
done < curr.lst 

'while x do; done '구문은 매우 기본적이고 쉽게 이해할 수 있지만 I/O 리디렉션을 추가하면 혼란 스러울 수 있습니다. 당신이 < curr.lstdone을 추가하면 조건에 대한 stdin이 파일의 내용을 사용 "을 의미 그래서, 당신은 지금 루프를 생략하면, 당신은 얻을 :. 그것은 read가 점점 분명 해졌다이다

read i < curr.lst 

그 입력은 curr.lst이고 변수는 i을 각 행의 내용으로 설정합니다. 따라서이 코드 블록은 기본적으로 "curr.lst의 각 행을 루프 내 코드로 변수 i으로 처리합니다.

3

는 파일 기술자에서 읽어 man 페이지 (쉘 입력 man page)에 따르면, "읽기". 코드에서

은, 루프는 일반적으로 파일에서 여러 줄을 처리하는 데 사용 read의 변수 $i

+0

그래서 마지막 행'done

+1

시도해 보면 – Asenar

+0

@Dark Matter를 볼 수 있습니다. -'read line