두 명령을 병렬로 사용하면 터미널 출력이 혼동됩니다. 이를 방지하는 방법은 무엇입니까?

두 명령을 병렬로 사용하면 터미널 출력이 혼동됩니다. 이를 방지하는 방법은 무엇입니까?

dvdbackup을 사용하여 대규모 DVD 컬렉션을 추출하기 위한 bash 스크립트를 작성하고 싶습니다. 4개의 DVD 드라이브를 병렬로 사용하면 dvdbackup의 터미널 출력이 함께 혼합됩니다.

dvdbackup -Mv --progress --error=a -i /dev/sr0 -o /home/xxxx/vids/ &
dvdbackup -Mv --progress --error=a -i /dev/sr1 -o /home/xxxx/vids/

가능한 오류를 제어하려면 터미널 출력이 필요합니다. 출력을 어떻게 제어할 수 있나요? 이 질문에 대해 Google에서 일치하는 검색어를 찾는 데 문제가 있습니다...

미리 감사드립니다

답변1

사용GNU 병렬넌 할 수있어:

parallel --line-buffer --tag 'dvdbackup -Mv --progress --error=a -i /dev/{1} -o /home/xxxx/vids/' ::: sr0 sr1

설명서에서:

--tag
    매개변수가 포함된 태그 라인. 매개변수와 탭 문자(\t)가 각 출력 라인에 추가됩니다.

답변2

당신은 할 수 없습니다. 이러한 프로그램은 병렬로 실행되므로 동시에 터미널에 씁니다. 당신이 할 수 있는 일은 각 인스턴스의 표준 오류를 별도의 파일로 캡처하는 것입니다.

dvdbackup -Mv --progress --error=a -i /dev/sr0 -o /home/xxxx/vids/ 2>log1 &
dvdbackup -Mv --progress --error=a -i /dev/sr1 -o /home/xxxx/vids/ 2>log2

dvdbackuplog1그런 다음 첫 번째 명령에 대한 오류/진행 보고서 등을 , 두 번째 명령에 대한 오류/진행 보고서 등을 받게 됩니다 log2.


또는 오류 출력에 레이블을 추가하려는 경우 다음을 수행할 수 있습니다.

dvdbackup -Mv --progress --error=a -i /dev/sr0 -o vids/ 3>&1 1>&2 2>&3 | 
    sed 's/^/Process A /' &  
dvdbackup -Mv --progress --error=a -i /dev/sr1 -o vids/ 3>&1 1>&2 2>&3 | 
    sed 's/^/Process B /' 

Process A이렇게 하면 첫 번째 프로세스에서 stderr에 인쇄된 각 줄의 시작 부분과 Process B두 번째 프로세스에서 stderr에 인쇄된 각 줄의 시작 부분 에 문자열이 추가됩니다 .

예를 들어:

$ seq 1 5 | sed 's/^/process A /' & seq 1 5 | sed 's/^/process B /'
[1] 1549053
process A 1
process A 2
process A 3
process A 4
process A 5
process B 1
process B 2
process B 3
process B 4
process B 5
[1]+  Done                    seq 1 5 | sed 's/^/process A /'

관련 정보