GNU 병렬 출력을 라인별 모드에서 실행할 때 실행되는 명령줄로 만들 수 있습니까?

GNU 병렬 출력을 라인별 모드에서 실행할 때 실행되는 명령줄로 만들 수 있습니까?

file 에 명령 목록이 있다고 가정해 보겠습니다 cmd_file.

다음을 통해 이러한 명령을 실행합니다.

cat cmd_file | parallel -k -I {} "{}"

명령 중 하나가 실패했습니다. 모든 명령은 정확히 동일한 CLI 도구와 다른 입력을 사용합니다.

이제 명령 목록을 명령 생성기 루프(더 복잡함)로 대체하여 잘못된 명령을 찾으려면 한 번에 하나의 명령을 실행해야 합니다.

for ...; do
  # assemble the vars for the command
  echo "<command>"
  <command>
done

예를 들어, 실패한 명령을 병렬로 표시하거나 stderr에서 실행 순서를 표시하는 메커니즘이 있습니까?

답변1

당신은 안내할 수 있습니다parallel실행된 각 명령을 표준 출력 또는 표준 오류로 인쇄합니다. man페이지 에서 :

-v  Print the job to be run on stdout (standard output).
    Can be reversed with --silent. See also -t.


-t  Print the job to be run on stderr (standard error).

어쩌면:

for ...; do
  # assemble the vars for the command
  echo "<command>"
done |
parallel -v -k

또는 준비가 되었다면 cmd_file:

parallel -v -k < cmd_file

또는 이와 유사한 것이 귀하의 필요에 적합할 것입니다.

답변2

명령이 종료 값을 설정하면 --joblog그것은 당신의 친구입니다.

답변3

예를 들어, 실패한 명령을 병렬로 표시하거나 stderr에서 실행 순서를 표시하는 메커니즘이 있습니까?

GNU Parallel 20220722에는 다음이 포함됩니다 --colour-failed.

parallel --tag --colour-failed "echo foo {}; {}" ::: true true false false true

관련 정보