쉘 스크립트 출력의 차이점

쉘 스크립트 출력의 차이점

저는 for 루프가 있고 백그라운드에서 16개의 스레드를 시작하고 다음 명령으로 이동하기 전에 각 스레드가 완료될 때까지 기다리는 간단한 셸 스크립트를 실행하고 있습니다.

이것은 쉘입니다:

total_threads=16

    echo "" 
    echo "Running Web Exclusive Item updates ... "  
    echo "Total Number of threads = " $total_threads
     for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
     do
        echo "Running Thread $i ..  "
        ./run_upd_web_excl_items.sh $i $total_threads &
     done
     wait
     echo "Done."


    echo ""  
    echo "Committing data ... "
    output_val=`$ORACLE_HOME/bin/sqlplus -S $UP <<endofsql
       whenever sqlerror exit 2
       whenever oserror exit 3
       SET HEADING  OFF
       SET FEEDBACK OFF
       SET ECHO     OFF
       set serverout on
      commit;
      /
    exit
    endofsql`
    echo "Done."

실행하면 출력은 다음과 같습니다.

~> . ./run_upd_web_excl_items_mitctrl.sh

Running Web Exclusive Item updates ...
Total Number of threads =  16
Running Thread 1 ..
Running Thread 2 ..
Running Thread 3 ..
Running Thread 4 ..
Running Thread 5 ..
Running Thread 6 ..
Running Thread 7 ..
Running Thread 8 ..
Running Thread 9 ..
Running Thread 10 ..
Running Thread 11 ..
Running Thread 12 ..
Running Thread 13 ..
Running Thread 14 ..
Running Thread 15 ..
Running Thread 16 ..
Total time for Thread 3 : 0 minute(s), 22.5 second(s).
Total time for Thread 2 : 0 minute(s), 23.3 second(s).
Total time for Thread 12 : 0 minute(s), 24.3 second(s).
Total time for Thread 8 : 0 minute(s), 24.8 second(s).
Total time for Thread 7 : 0 minute(s), 29.9 second(s).
Total time for Thread 1 : 0 minute(s), 30 second(s).
[1]   Done                    ./run_upd_web_excl_items.sh $i $total_threads
[2]   Done                    ./run_upd_web_excl_items.sh $i $total_threads
[3]   Done                    ./run_upd_web_excl_items.sh $i $total_threads
[7]   Done                    ./run_upd_web_excl_items.sh $i $total_threads
[8]   Done                    ./run_upd_web_excl_items.sh $i $total_threads
[12]   Done                    ./run_upd_web_excl_items.sh $i $total_threads
Total time for Thread 16 : 0 minute(s), 32.1 second(s).
Total time for Thread 4 : 0 minute(s), 32.8 second(s).
[4]   Done                    ./run_upd_web_excl_items.sh $i $total_threads
[16]+  Done                    ./run_upd_web_excl_items.sh $i $total_threads
Total time for Thread 10 : 0 minute(s), 33.2 second(s).
Total time for Thread 13 : 0 minute(s), 33.7 second(s).
Total time for Thread 5 : 0 minute(s), 33.8 second(s).
[5]   Done                    ./run_upd_web_excl_items.sh $i $total_threads
[10]   Done                    ./run_upd_web_excl_items.sh $i $total_threads
[13]   Done                    ./run_upd_web_excl_items.sh $i $total_threads
Total time for Thread 14 : 0 minute(s), 35.6 second(s).
Total time for Thread 6 : 0 minute(s), 36.8 second(s).
[6]   Done                    ./run_upd_web_excl_items.sh $i $total_threads
[14]-  Done                    ./run_upd_web_excl_items.sh $i $total_threads
Total time for Thread 11 : 0 minute(s), 37.7 second(s).
Total time for Thread 9 : 0 minute(s), 37.8 second(s).
[9]   Done                    ./run_upd_web_excl_items.sh $i $total_threads
[11]-  Done                    ./run_upd_web_excl_items.sh $i $total_threads
Total time for Thread 15 : 0 minute(s), 38.8 second(s).
[15]+  Done                    ./run_upd_web_excl_items.sh $i $total_threads
Done.

Committing data ...
Done.

일반적으로 내가 기대하는 출력은 다음과 같습니다.

~> ./run_upd_web_excl_items_mitctrl.sh

Running Web Exclusive Item updates ...
Total Number of threads =  16
Running Thread 1 ..
Running Thread 2 ..
Running Thread 3 ..
Running Thread 4 ..
Running Thread 5 ..
Running Thread 6 ..
Running Thread 7 ..
Running Thread 8 ..
Running Thread 9 ..
Running Thread 10 ..
Running Thread 11 ..
Running Thread 12 ..
Running Thread 13 ..
Running Thread 14 ..
Running Thread 15 ..
Running Thread 16 ..
Total time for Thread 1 : 0 minute(s), 26.5 second(s).
Total time for Thread 10 : 0 minute(s), 27.1 second(s).
Total time for Thread 2 : 0 minute(s), 27.5 second(s).
Total time for Thread 6 : 0 minute(s), 27.9 second(s).
Total time for Thread 3 : 0 minute(s), 27.9 second(s).
Total time for Thread 15 : 0 minute(s), 27.9 second(s).
Total time for Thread 9 : 0 minute(s), 28 second(s).
Total time for Thread 5 : 0 minute(s), 28 second(s).
Total time for Thread 16 : 0 minute(s), 28.1 second(s).
Total time for Thread 8 : 0 minute(s), 30.5 second(s).
Total time for Thread 12 : 0 minute(s), 31 second(s).
Total time for Thread 11 : 0 minute(s), 31.5 second(s).
Total time for Thread 7 : 0 minute(s), 31.9 second(s).
Total time for Thread 14 : 0 minute(s), 32 second(s).
Total time for Thread 13 : 0 minute(s), 32.7 second(s).
Total time for Thread 4 : 0 minute(s), 34.8 second(s).
Done.

Committing data ...
Done.

쉘이 다음과 같은 추가 행을 인쇄하는 이유를 알 수 없습니다.

[13]   Done                    ./run_upd_web_excl_items.sh $i  $total_threads

어떤 아이디어가 있나요?

답변1

스크립트를 실행 중이기 때문입니다. 쉘(기본 대화형 쉘)은 마치 쉘 프롬프트에 수동으로 입력한 것처럼 이 파일의 명령을 처리합니다. 표시되는 메시지는 기본 백그라운드 프로세스(즉, 기본 셸에서 직접 시작된 프로세스)가 종료될 때 일반적으로 셸에 표시되는 메시지입니다.. script_name

특별한 이유가 없는 한, 다음을 사용하여 스크립트를 실행하는 것이 좋습니다.

sh run_upd_web_excl_items_mitctrl.sh

(또는 필요한 경우 사용 bash) 또는 실행 가능하게 만드십시오.

chmod +x run_upd_web_excl_items_mitctrl.sh

그런 다음 실행

./run_upd_web_excl_items_mitctrl.sh

답변2

그 이유는 백그라운드에서 실행되는 작업이기 때문입니다.현재의껍데기.

스크립트를 사용 .하거나 source실행할 때 터미널에 직접 명령을 입력한 것처럼 하위 쉘에서 실행되지 않습니다.

스크립트의 첫 번째 줄로 추가 #!/bin/bash하고 가져오는 대신 직접 실행하세요.

관련 정보