2016-06-08 1 views
0

의 데이터 그리고 모든 명령을 읽어하지만 루프가 폐쇄되지 않는 while 루프를 중단하는 방법 !

나는 그런

done=0 
while read -r line; do 
    [commands] 
    if [ "$done" -ne 0 ]; then 
     break 
    fi 
done < <(sqlplus -s ${user}/${pwd}@${database} @query.sql) 

또는

while read -r line || [[ -n "$line" ]]; do 
    [commands] 
done < <(sqlplus -s ${user}/${pwd}@${database} @query.sql) 

이미 여러 솔루션을 시도했다 그러나 그들은 잘 작동하지 않습니다. 나는 '- 또한 내가 사람이 제가이 문제 위에 열거 한거야 이유를 이해하는 데 도움이 또는 다른 방법을 사용하는 것이 좋습니다 수있는 경우 결과 집합의 마지막 줄은 \ n \ r 일 기호

을 가지고 있음을 확인했습니다 +

매우 감사 할 것입니다.

미리 감사드립니다.

답변

0

프로세스 대체는 지정된 명령의 출력을 읽을 수있는 특수 파일 또는 FIFO의 이름으로 확장됩니다. 더 이상 프로그램 출력을 사용할 수 없을 때 파일 끝이 감지 될 것이라고 반드시 따라야하는 것은 아닙니다. 그건 분명 FIFO에서 예상되는 동작이 아닙니다.

나는 당신이 직업에 대해 잘못된 도구를 사용하고 있다고 생각합니다. 이 작업의 프로세스를 교체하는 대신 일반 파이프를 사용할 수 있어야합니다 : 실제로 종료가하는

sqlplus -s ${user}/${pwd}@${database} @query.sql | while read -r line; do 
    [commands] 
done 

만큼 sqlplus대로 그렇게 한 후, read 루프 종료 원인, EOF를 감지합니다.