2010-11-21 18 views
-1

hakkında bir hata veriyor Linux'ta yeni başlayan biriyim ve bash komut dosyasında büyük bir başlangıç ​​yapıyorum. Ev dizinimi yedekleyecek ve bana ilerlemeyi gösterecek bir bash betiği yazmaya çalışıyorum. Bir tar.bz2 dosyasını tanımlarken bir ilerleme çubuğu göstermeme izin veren, ancak bir tane oluştururken kullanmamı sağlayan bir komut dosyası buldum. Ben kodunuzu bulup çalışıyorum, ancak bana bir hata veriyor: lsof:Verdiğiniz İlerleme Çubuğu kodu bana PID

 
#! /bin/bash 
tar -jcf userhomeBU$(date +%Y&m&d)".tar.bz2" /home/user 
lsof -o0 -o -p $PID | 
awk ' 
      BEGIN { CONVFMT = "%.2f" } 
      $4 ~ /^[0-9]+r$/ && $7 ~ /^0t/ { 
        offset = substr($7, 3) 
        fname = $9 
        "stat -f %z '\''" fname "'\''" | getline 
        len = $0 
        print fname, offset/len * 100 "%" 
      } 
    ' 
: Burada How to add a progress bar to a shell script? kodudur: hayır işlem kimliği ben bu sayfadan kodunuzu gitmek

4.81 lsof belirtilen

Ev dizinim yedeklenmedi, ancak hata nedeniyle ilerleme çubuğu yok.

Bu işlemin ne zaman yapıldığını görmek için PID'yi kullanacağı anlaşılıyor. Dosya ismini değil, dosyanın isminin başından bilinmeyeceğinden PID'yi kullandığını düşünüyorum. Bu betiğin tam olarak ne yaptığını açıklayabilir misiniz, ve neden izlemek için bir PID alamıyorum. Yedekleme kodumu önüne ve sonuna koymuştum ama bir çubuk göstermiyor ve aynı hatayı sadece farklı bir zamanda alıyorum.

Yardım!

cevap

0

Diğer yanıtlardan birinin orijinal yayınınızdan bir uyarlaması. Test ettim ve bu benim makinede çalışır:

tar -Ocf - /home/user | pv -i 1 -w 50 -berps `du -bs /home/user | awk '{print $1}'` | bzip2 - > userhomeBU$(date +%Y%m%d)".tar.bz2" 
+0

Bu bana herhangi bir ilerleme göstermedi. Yanlış yaptığımdan emin değilim. – Newbie

+0

Farklı bir yaklaşım kullanmak için yanıtı değiştirdi. –

+0

Ayrıca, çalışmak için tarih komutu için 'm & d' yerine'% m% d 'kullanmam gerekiyordu. –

0

deneyin, bir değişkene tüm katran komutunu atama pidof değişkeni geçirmeden:

... 
TAR_CMD='tar -jcf userhomeBU$(date +%Y&m&d)".tar.bz2" /home/user' 
lsof -o0 -o -p `pidof -s $TAR_CMD` | \ 
awk ... 
+0

Bu, yalnızca bir "tar" işleminin olduğunu varsayar. Başkaları varsa, "pidof" iki pids ile geri dönecektir. –

+0

"Geçersiz işlem kimliği: pidof -s $ STAR_CMD" hatası alıyorum – Newbie

+0

Eğer tar cmd'yi bir varlığa atayabiliyorsam, cmd'yi cmd çalıştırması için var ile cmd'yi nasıl arayabilirim? – Newbie

0

Bu çok büyük bir ev dir değil ama İçinde birkaç büyük dosya var. Birkaç iso'dan dolayı yedekleme yapmak yaklaşık 45 saniye sürer ve bir VM'de. Ayrıca, çalışmadığını biliyorum çünkü oluşturulan bir yedekleme dosyası yok. Komut dosyasında & yoktur. Çalıştırdığımda aşağıdaki çıktısı alırım:

[1] stopped  tar -Ocf - /home/user | pv -i 1 -w 50 -berps 'du -bs /home/user | awk '{print $1}'' | bzip2 - > userBU(date +%Y%m%d)".tar.bz2"
Bu, yalnızca kodumun bir kopyası. [] 'Daki ​​sayı her koşuda birer birer gider. Koddaki ilk ve son 'tilda'nın altında gerçekten bekar olan' ancak bu yazıya hiç rastlanmadı.