bash에서 지속적으로 명령 실행

bash에서 지속적으로 명령 실행

다음 bash를 사용하면 "list.txt" 파일에 이름이 포함된 모든 폴더에서 명령 1,2,3을 실행할 수 있습니다.

#!/bin/bash
cat list.txt | while read i 
do
command1 &
command2 &
command3 &
done

코드의 명령 1,2,3은 "list.txt" 파일에 이름이 포함된 모든 폴더에서 함께 실행됩니다. 모든 폴더에서 명령을 차례로 실행하려면 어떻게 해야 합니까(예: 첫 번째 명령이 완료되면 두 번째 명령이 시작되는 등...). 명령 사이에 "대기"를 사용해 보았지만 작동하지 않습니다! 여기에 제안된 솔루션여러 폴더에 대해 연속적으로 명령 실행 효과적인! 다른 해결책을 찾고 있어요

답변1

&이전 명령이 완료된 후 다음 명령이 실행되도록 제거합니다 .

답변2

순차적으로 실행하고 싶지만 여전히 백그라운드에서 실행하고 각 명령의 반환 값에 신경 쓰지 않는 경우 다음을 수행할 수 있습니다.

#!/bin/bash
cat list.txt | while read i 
do
    { command1; command2; command3; } &
done

성공한 경우에만 실행하려면 다음을 command2사용할 수 있습니다.command1&&

#!/bin/bash
cat list.txt | while read i 
do
    command1 && command2 && command3 &
done

포그라운드에서 모든 것을 동기적으로 실행하려면 &완전히 제거하면 됩니다.

#!/bin/bash
cat list.txt | while read i 
do
    command1
    command2
    command3
done

답변3

while read -r i #read directory as a raw line
do
    cd "$i"     #cd into the directory
    command1    #run the commands consecutively
    command2
    command3
    cd -        #cd back
done < list.txt

모든 디렉터리 처리를 동시에 실행하려면(명령 1~3이 연속으로 유지됨) 다음을 바꾸십시오.

    command1   
    command2
    command3

그리고

    (
    command1   
    command2
    command3
    )&

답변4

이전 명령이 성공한 경우에만 나머지 명령을 실행하려면 &&연산자가 올바른 선택입니다.

command 1 &&
command 2 &&
command 3

then은 0이 반환된 경우(즉, 성공)와 0이 반환된 경우에만 실행 command 2됩니다 . 이는 실행이 완료될 때까지 기다리는 것을 의미합니다.command 1command 3command 2command 2command 1

관련 정보