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
dvdbackup
log1
그런 다음 첫 번째 명령에 대한 오류/진행 보고서 등을 , 두 번째 명령에 대한 오류/진행 보고서 등을 받게 됩니다 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 /'