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
その後、最初のコマンドのエラー/進捗レポートなど、2番目のコマンドのエラー/進捗レポートなどが表示されます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に印刷された各行の先頭に、2番目のプロセスでstderrに印刷されProcess B
た各行の先頭に文字列が追加されます。
たとえば、
$ 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 /'