両方のコマンドを並列に使用すると、端末出力が混乱します。これを防ぐ方法は?

両方のコマンドを並列に使用すると、端末出力が混乱します。これを防ぐ方法は?

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その後、最初のコマンドのエラー/進捗レポートなど、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 /'

関連情報