[bash] Sprawdzenie czy pakiet jest zainstalowany

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Zacol
Piegowaty Guziec
Piegowaty Guziec
Posty: 17
Rejestracja: 02 kwie 2007, 23:48
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: [bash] Sprawdzenie czy pakiet jest zainstalowany

Post autor: Zacol »

U mnie np. wykonanie kopi zapasowej repo, podmienieniu go na nowe oraz wykonanie update zajmuje około minuty jeśli nawet nie więcej. Pasek postępu miałby obrazować postęp całej funkcji w której mieściłyby się w.w. zadania.

Beluosus możesz trochę jaśniej, lakonicznie, krok po kroku dokładnie na tym przykładzie kodu który podałem wyjasnić mi to jeszcze raz? Będę Ci naprawdę wdzięczny :) Próbowałem już na kilka sposobów ale nie mogę tego zrobię :/
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: [bash] Sprawdzenie czy pakiet jest zainstalowany

Post autor: beluosus »

Via digipedia:
--gauge tekst wysokość szerokość procent
Okienko gauge wyświetla miarkę na dole okienka. Miarka określa procentowość. Nowe wartości procentowe są odczytywane ze standardowego wejścia, jeden integer na linię. Miarka jest odnawiana aby odzwierciedlić każdy nowy procent. Okienko kończy działanie na EOF.
Ty drukujesz na standardowym wyjściu wartości procentowe, a dialog zamienia je na pasek postępu. Nie umiem tego prościej wytłumaczyć. Mogę ewentualnie dodać prostszy kod realizujący ideę:

Kod: Zaznacz cały

#!/bin/bash

function progress
{
    sleep 1
    echo 25
    sleep 1
    echo 50
    sleep 1
    echo 75
    sleep 1
    echo 100
    sleep 1
}

progress | dialog --gauge "Progress:" 0 60 0
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
Zacol
Piegowaty Guziec
Piegowaty Guziec
Posty: 17
Rejestracja: 02 kwie 2007, 23:48
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: [bash] Sprawdzenie czy pakiet jest zainstalowany

Post autor: Zacol »

Czyli on odczytuje jedynie wartości z echo, tak? Jeżeli mam skrypt mający 100 linijek i co 25 linijek dam "echo 25", "echo 50", itd. to on odczyta tylko te wartości i wyświetli je na pasku, tak?

Chyba już rozumiem :) Mimo to pozostał mi jeszcze jeden drobny problem. Pasek idzie, wszystko działa, ale pod sam koniec wyświetlają mi się rzeczy, które chciałbym aby były niewidoczne. Oto jak wygląda część kodu:

Kod: Zaznacz cały

repo() {
sudo cp -p /etc/apt/sources.list /etc/apt/sources.list_backup
echo "deb http://archive.ubuntu.com/ubuntu/ karmic main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ karmic main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ karmic-updates main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ karmic-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ karmic-backports main restricted universe multiverse" &> /dev/null
echo 33
echo "deb-src http://archive.ubuntu.com/ubuntu/ karmic-backports main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ karmic-proposed main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ karmic-proposed main restricted universe multiverse
deb http://archive.canonical.com/ubuntu karmic partner
deb-src http://archive.canonical.com/ubuntu karmic partner
deb http://security.ubuntu.com/ubuntu karmic-security main restricted universe multiverse" &> /dev/null
echo 66 
echo "deb-src http://security.ubuntu.com/ubuntu karmic-security main restricted universe multiverse
deb http://packages.medibuntu.org/ karmic free non-free
deb-src http://packages.medibuntu.org/ karmic free non-free
deb http://archive.getdeb.net/ubuntu karmic-getdeb apps" &> /dev/null | sudo tee /etc/apt/sources.list > /dev/null
wget http://packages.medibuntu.org/medibuntu-key.gpg http://archive.getdeb.net/getdeb-archive.key -O- | sudo apt-key add -
sudo apt-get update
echo 100
}

repo | dialog --gauge "Progress:" 0 60 0
A oto screen (lepiej pokaże o co mi chodzi) tego co dzieje się pod koniec wykonywania tej części skryptu.
http://img692.imageshack.us/img692/4707 ... ranujj.png

Nie chcę tych "śmieci" na końcu. Jak mogę się ich pozbyć? Wygląda na to, że są one wynikiem działania poleceń, które występują po: sudo tee /etc/apt/sources.list > /dev/null...

Dziękuję Ci beluosus. Masz niesamowitą cierpliwość :)
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: [bash] Sprawdzenie czy pakiet jest zainstalowany

Post autor: beluosus »

Zacol pisze:Czyli on odczytuje jedynie wartości z echo, tak? Jeżeli mam skrypt mający 100 linijek i co 25 linijek dam "echo 25", "echo 50", itd. to on odczyta tylko te wartości i wyświetli je na pasku, tak?
Nie, nie tylko z echa. Dialog czyta wszystko ze standardowego wyjścia. Aczkolwiek akceptuje linijki w których jest tylko jedna liczba całkowita.

Dopiero teraz przejrzałem zawartość tej Twojej funkcji (shame on me)... wiesz w ogóle co robi poniższe polecenie?

Kod: Zaznacz cały

echo "deb http(...) multiverse" &> /dev/null
Otóż polecenie to nie ma jakiegokolwiek wpływu na cokolwiek. Dopiero jedynie wget coś robi i to właśnie on drukuje niechciany przez Ciebie tekst.

Kod: Zaznacz cały

man wget ->
       -q
       --quiet
           Turn off Wget's output.
Lepiej przeczytaj radę LukAs.
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
Zacol
Piegowaty Guziec
Piegowaty Guziec
Posty: 17
Rejestracja: 02 kwie 2007, 23:48
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: [bash] Sprawdzenie czy pakiet jest zainstalowany

Post autor: Zacol »

Z tym wgetem sobie poradziłem, ale zadałeś mi pytanie, na które obawiam się, że nie znam odpowiedzi.

Kod: Zaznacz cały

echo "deb http(...) multiverse" &> /dev/null
Myślałem, że ten fragment zawarty w cudzysłowach jest dodawany do pliku sources.list, a errory daje do /dev/null ale teraz już sam nie wiem. Nie rozumiem też rady LukAsa :/
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 22 gości