2017-12-20 17 views
1

루프 내에서 여러 개의 sqlplus 명령을 보내는 방법이 있지만 다음 명령이 시작될 때까지 성공할 때까지 기다리는 방법이 있습니까? 다음은 내 코드 샘플입니다. 내가 실행하려고하는 함수가 10-20 초 정도 걸리므로 수면을 추가하려고했습니다. 저는 15s 상수를 없애고 다른 것들을 하나씩 실행하기를 원합니다.루프 내의 sqlplus - unix

if [ "$#" -eq 1 ]; then 
    checkUser "$1" 
    while read line; do 
    sqlplus $user/[email protected]$server $line 
    sleep 15 
    done < "$wrapperList" 
fi 
+0

오, 나는 그것이 sqlplus 명령을 병렬로 보낼 것이라고 생각했습니다. sqlplus 명령에 사용될 .sql 파일의 목록 일뿐입니다. 시도하지 않았다, 그것은 나의 첫번째 가정이었다. 나는 시도 할 것이고 나는 대답으로 돌아올 것이다. 감사 –

답변

1

while 루프의 명령이 순서대로 수행됩니다. 체인 지침을 ;를 사용, 그렇게 할 동등한 것 다음 sqlplus 명령이 병렬로 호출 할 수 없습니다 때문에

sqlplus $user/[email protected]$server $line1 
sqlplus $user/[email protected]$server $line2 

그래서 당신이 여기에 sleep 15 필요하지 않습니다. 당신이 이미 그랬던 것처럼 그들을 다른 사람들에게 하나씩 부르고 있습니다.

의 Nota : 이전의 리턴 코드가 0

sqlplus $user/[email protected]$server $line1 &&\ 
sqlplus $user/[email protected]$server $line2 

이 while 루프에서 이것을 가지고있는 경우에만 실행합니다 : 그것은 말을 &&를 사용하여, 첫 번째 줄이 제대로 반환하지 않은 경우 실행을 중지 더 나은 것입니다

당신이 병렬로 실행할 때 한편
checkUser "$1" 
    while read line; do 
    sqlplus $user/[email protected]$server $line 
    RET_CODE=$? # check return code, and break if not ok. 
    if [ ${RET_CODE} != 0 ]; then 
     echo "aborted." ; break 
    fi 
    done < "$wrapperList" 

,는 구문처럼 여기, 다른 : Unix shell script run SQL scripts in parallel