[BASH][YAD] Błędny zwrot z pętli z YAD

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
adamski9000
Sędziwy Jeż
Sędziwy Jeż
Posty: 59
Rejestracja: 18 lis 2012, 16:05
Płeć: Mężczyzna
Wersja Ubuntu: 14.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

[BASH][YAD] Błędny zwrot z pętli z YAD

Post autor: adamski9000 »

Witam

Natknąłem sie na dziwny problem. Zastanawiam się czy to niejakis bug w bibliotece YAD.
Mianowice poniższy skrypt dla zmiennej $i zwraca ciągle 0. Próbowałem różnych kombinacji, ale ciagle to samo. Jakby YAD kasował wartość zmiennej.

Kod: Zaznacz cały

let i=0
for i in {1..5}
do
    echo $i
done | yad --title='teste' --progress --progress-text="szukam..." --auto-close

echo $i
Lenovo G580, Ubuntu 14.04, Detektyw Komputerowy dla Windows - OPEN SOURCE
stahoo23
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 170
Rejestracja: 15 sty 2007, 16:34
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86

Re: [BASH][YAD] Błędny zwrot z pętli z YAD

Post autor: stahoo23 »

Kazesz yad wyswietlac cos co jest poza petla?
Jaki jest Twoj cel?
Awatar użytkownika
adamski9000
Sędziwy Jeż
Sędziwy Jeż
Posty: 59
Rejestracja: 18 lis 2012, 16:05
Płeć: Mężczyzna
Wersja Ubuntu: 14.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Re: [BASH][YAD] Błędny zwrot z pętli z YAD

Post autor: adamski9000 »

Według przykładów tak powinno się robić, czyli umieszczamy Yada na wyjściu np.

Kod: Zaznacz cały

find $HOME -name '*.ps' | yad --progress --pulsate
wyświetla pasek postępu podczas wyszukiwania.
Cel jest taki aby uzyskać pasek postępu z działania. No i przy okazji, aby wynik z operacji uzyskać :)
Lenovo G580, Ubuntu 14.04, Detektyw Komputerowy dla Windows - OPEN SOURCE
stahoo23
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 170
Rejestracja: 15 sty 2007, 16:34
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86

Re: [BASH][YAD] Błędny zwrot z pętli z YAD

Post autor: stahoo23 »

Pasek z postepu z dzialania? Przeciez ta petla wyswietla po kolei cyfry.
Jak myslisz ... ile to potrwa?!
Wynik wyswietlisz np tak:

Kod: Zaznacz cały

#!/bin/bash
TEXT=`let i=0; for i in {1..5} ; do echo $i ; done` && yad --text "$TEXT"
#albo tak
yad --text "$(let i=0; for i in {1..5} ; do echo $i ; done)"
Co do samej petli, po co tam let?
Awatar użytkownika
adamski9000
Sędziwy Jeż
Sędziwy Jeż
Posty: 59
Rejestracja: 18 lis 2012, 16:05
Płeć: Mężczyzna
Wersja Ubuntu: 14.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Re: [BASH][YAD] Błędny zwrot z pętli z YAD

Post autor: adamski9000 »

Chyba nie do końca się zrozumieliśmy. Podany przykład jest uproszczony i ma na celu pokazać, iż wartość zmiennej ( w naszym przykładzie zmienna i ) wykonywana w pętli, po zakończeniu działania YAD zostaje pusta, choć niepowinna.
Czyli po zakończeniu wyswietlania okna dialogu wartość zmiennej i jest pusta. A powinno być w tym przypadku 5.

Kod: Zaznacz cały

TEXT=`let i=0; for i in {1..5} ; do echo $i ; done` && yad --text "$TEXT"
echo "wynik: $i" 

Kod: Zaznacz cały

yad --text "$(let i=0; for i in {1..5} ; do echo $i ; done)" 
echo "wynik: $i"
Wynik powyższych działań:

Kod: Zaznacz cały

wynik:
a powinno być:

Kod: Zaznacz cały

wynik: 5 
Lenovo G580, Ubuntu 14.04, Detektyw Komputerowy dla Windows - OPEN SOURCE
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:

Re: [BASH][YAD] Błędny zwrot z pętli z YAD

Post autor: beluosus »

Wszystko jest w porządku prócz małego szczegółu, gdy robisz pipe'a to tworzysz subshell, a zmienne stworzone w procesie potomnym nie są widoczne przez rodzica. Rozwiązanie:

Kod: Zaznacz cały

#!/bin/bash

for ((i = 0; i < 100; i += 20))
do
    echo $i
    sleep 0.5
done > >(yad --title='teste' --progress --progress-text="szukam..." --auto-close)

echo $i
Awatar użytkownika
adamski9000
Sędziwy Jeż
Sędziwy Jeż
Posty: 59
Rejestracja: 18 lis 2012, 16:05
Płeć: Mężczyzna
Wersja Ubuntu: 14.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Re: [BASH][YAD] Błędny zwrot z pętli z YAD

Post autor: adamski9000 »

Dzięki beluosus, teraz działa. Swoją drogą nie wiedziałem, iż jest taki operator jak > > . W manualu z basha nic o tym nie ma mowy. Toż to jakieś diabelskie sztuczki :)
Lenovo G580, Ubuntu 14.04, Detektyw Komputerowy dla Windows - OPEN SOURCE
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:

Re: [BASH][YAD] Błędny zwrot z pętli z YAD

Post autor: beluosus »

Po pierwsze to nie operator > > tylko zwykłe przekierowanie połączone z operatorem >(). Działanie to nazywa się "process substitution", po drugie: jest o tym w manualu basha.

Przykład:

Kod: Zaznacz cały

echo beluosus > >(cat)
Jak jeszcze dodamy przekierowanie stdout na stderr (brak buforowania)

Kod: Zaznacz cały

echo beluosus > >(cat) 1>&2
to wynik w konsoli będzie identyczny z:

Kod: Zaznacz cały

echo beluosus | cat
Zamiast > można użyć >>, w tym wypadku nic to nie zmieni.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

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