두 명령이 && 연산자로 연결된 경우 두 번째 명령 대신 첫 번째 명령을 기다리는 방법

두 명령이 && 연산자로 연결된 경우 두 번째 명령 대신 첫 번째 명령을 기다리는 방법

다음과 같은 bash 루프 가 있습니다 for.

for file in *.mp4; do
  command1 "${file}" && command2 "${file}"
done

command2이를 통해 예상되는 대로 성공하는 한 실행이 가능해 집니다 .command1

이제 내가 원하는 것은 루프하는 것입니다command1완료 만 기다리세요, 하지만기다릴 필요가 없습니다command2반복하기 전에 완료되었습니다. 이를 수행할 수 있는 방법이 있습니까?

나는 성공하지 않고 시도했습니다.

  • command1 && command2 &- 종료를 기다리지 않고 command1병렬로 실행
  • command1 && ( command2 & )- command2나갈 때까지 기다리세요. 필요 없습니다.

답변1

조금 자세하지만 다음과 같이 하면 작동합니다.

for file in *.mp4; do
  if command1 "${file}"; then
    command2 "${file}" &
  fi
done

답변2

좋아요@muru의 답변그것을 주요 답변으로 받아들입니다.

비슷한 방법도 찾았는데, 이에 대한 대안으로 여기에 게시하겠습니다.

for file in *.mp4; do
  command1 "${file}"
  [ "${?}" -eq 0 ] && command2 "${file}" &
done

관련 정보