Bash

兩個後台腳本的列印輸出

  • November 11, 2016

我正在嘗試列印來自在後台同時執行的不同腳本的 2 個輸出和第三個輸出。

我的第三個腳本如下所示:

#!/bin/bash
./script1 &
./script2 &

每個腳本的輸出都是一個簡單的進度條:

scriptN: [##....................] (10%) (10/100)

我希望輸出是這樣的:

script1: [##....................] (10%) (10/100)
script2: [##....................] (10%) (10/100)

我認為這是不可能的,至少在沒有巨大努力的情況下是不可能的。終端中的動態進度條依靠控製字元來改變游標的位置並在螢幕上重繪字元。同時執行兩個程序,每次嘗試控制正在繪製的內容都會導致兩個程序之間發生衝突。

可以編寫一個腳本來模擬終端並獨立地組合每個輸出流,然後將它們重新組合成一個流,但我以前從未聽說過有人嘗試過這樣的事情。

這有點駭人聽聞,會向您的螢幕發送垃圾郵件,因此向後滾動並不容易,但應該可以。

#!/bin/bash
output1=$(mktemp /tmp/tmpout.XXXXXX)
output2=$(mktemp /tmp/tmpout.XXXXXX)
./script1 &> $output1 &
pid1=$!
./script2 &> $output2 &
pid2=$!

while [ -d "/proc/$pid1" ] || [ -d "/proc/$pid2" ]
do
  clear
  tail -n 1 $output1
  tail -n 1 $output2
  sleep 1
done
rm -f $output1 $output2

引用自:https://unix.stackexchange.com/questions/322692