Tạo một thanh tiến trình với hộp thoại Tiếng Việt từ đầu ra rsync


16

Tôi đang tìm cách để lọc / chuyển hướng đầu ra rsync theo cách có thể được đưa vào lệnh "hộp thoại --gauge", vì vậy tôi có thể có được một thanh tiến trình tìm kiếm đẹp mắt trong quá trình đồng bộ hóa tệp. Hiện tại tôi chỉ thử nghiệm trực tiếp tại dấu nhắc, nhưng tôi dự định thực hiện điều này trong tập lệnh shell (bash).

Tôi đã tìm kiếm trên internet và tìm thấy các mẩu và mảnh, nhưng tôi vẫn còn thiếu một cái gì đó để làm cho nó hoạt động

(Tuyên bố miễn trừ trách nhiệm: Đây có thể là một cách tiếp cận hoàn toàn sai và là một sự quái dị chuyển hướng / đường ống)

Những gì tôi hiện đang đặt cùng nhau:

rsync -avz --progress -e "ssh" user@server:/home/user/data/ /home/user/data | awk -f /home/user/rsync.awk | sed 's/\([0-9]*\).*/\1/' | dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70

Đầu tiên tôi có lệnh rsync thực tế với tùy chọn --proceed Đầu ra từ rsync được dẫn vào awk và sử dụng bộ lọc awng awk:

{
   if (index($0, "to-check=") > 0)
   {
        split($0, pieces, "to-check=")
        split(pieces[2], term, ")");
        split(term[1], division, "/");
        print (1-(division[1]/division[2]))*100
}
#   else
#   {
#       print "#"$0;
#   }
   fflush();
}

Điều này lọc ra đầu ra rsync và cung cấp tỷ lệ phần trăm theo định dạng sau:

53.7037
55.5556
57.4074
59.2593
61.1111
62.963

Vì vậy, để loại bỏ các số thập phân, tôi cung cấp đầu ra cho sed:

sed 's/\([0-9]*\).*/\1/'

Cung cấp đầu ra sau:

64
66
68
70
72
74
75
77

Những con số này được dẫn vào hộp thoại như thế này:

dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70 

Theo như tôi biết, "hộp thoại --gauge", v.v. nên chấp nhận điều này, nhưng nó chỉ hiển thị tiến độ là 0% cho đến khi nó đột nhiên đạt 100%

Ai đó có thể chỉ cho tôi đi đúng hướng ở đây? Tôi có xa từ một thanh tiến trình làm việc không? Có cách nào tốt hơn để đạt được điều này?

Trân trọng,

Chúa Kitô

EDIT : Sau khi tính đến câu trả lời của @lynxlynxlynx, dòng lệnh chính xác là:

rsync -avz --progress -e "ssh" user@server:/home/user/data/ /home/user/data \ 
 | awk -f /home/user/rsync.awk \ 
 | sed --unbuffered 's/([0-9]*).*/\1/' \ 
 | dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70

1
Âm thanh giống như một cái gì đó (có thể là awk) đang đệm đầu ra cho đến khi chương trình trước khi nó trong đường ống gửi EOF. Mặc dù vậy, làm thế nào để kiểm tra hoặc giải quyết vấn đề này, ...
Shadur

Câu trả lời:


12
for i in 10 20 30; do echo $i; sleep 1; done | dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70

hoạt động tốt, vì vậy @Shadur đúng và có bộ đệm khi chơi.

Thêm sedvũ nữ thoát y vào hỗn hợp cho thấy nó là thủ phạm (chỉ hiển thị 0 và 30):

for i in 10 20 30; do echo $i; sleep 1; done | sed 's/\([0-9]*\).*/\1/' | dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70

Bây giờ vấn đề đã được biết, bạn có nhiều lựa chọn. Cách sạch nhất sẽ là làm tròn / cắt tỷ lệ phần trăm awkbằng thao tác toán học hoặc chuỗi, nhưng vì bạn có GNU sed, chỉ cần thêm -uhoặc --unbufferednên thực hiện thủ thuật.

Tuy nhiên, để hoàn thiện hơn, một trường hợp thử nghiệm đơn giản awkcũng cho thấy bộ đệm:

for i in 10 20 30; do echo $i; sleep 1; done | awk '{print $0}' | sed -u 's/\([0-9]*\).*/\1/' | dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70 

Nhưng bạn đã xử lý fflushvấn đề đó rồi, vì vậy tôi không mong đợi vấn đề.


Chà ..! Cảm ơn rất nhiều! Thêm --unbuffered vào sed là điều duy nhất cần thiết! Cảm ơn đã chia sẻ thời gian và kiến ​​thức của bạn Shadur & lynxlynxlynx!
chr1573r

Đối với những người khác tự hỏi lệnh cuối cùng trông như thế nào: rsync -avz --proceed -e "ssh" user @ server: / home / user / data / / home / user / data | awk -f /home/user/rsync.awk | sed --unbuffered 's / ([0-9] *). * / \ 1 /' | hộp thoại --title "My Gauge" --gauge "Xin chào, đây là tiện ích đo" 20 70
chr1573r

Không có vấn đề, và chào mừng đến với trang web. :)
Shadur
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.