Strona 1 z 1
[BASH][YAD] Błędny zwrot z pętli z YAD
: 22 sty 2013, 01:27
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
Re: [BASH][YAD] Błędny zwrot z pętli z YAD
: 22 sty 2013, 09:14
autor: stahoo23
Kazesz yad wyswietlac cos co jest poza petla?
Jaki jest Twoj cel?
Re: [BASH][YAD] Błędny zwrot z pętli z YAD
: 22 sty 2013, 18:47
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ć

Re: [BASH][YAD] Błędny zwrot z pętli z YAD
: 22 sty 2013, 20:06
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?
Re: [BASH][YAD] Błędny zwrot z pętli z YAD
: 22 sty 2013, 22:22
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ń:
a powinno być:
Re: [BASH][YAD] Błędny zwrot z pętli z YAD
: 22 sty 2013, 22:33
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
Re: [BASH][YAD] Błędny zwrot z pętli z YAD
: 23 sty 2013, 18:00
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

Re: [BASH][YAD] Błędny zwrot z pętli z YAD
: 23 sty 2013, 23:36
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:
Jak jeszcze dodamy przekierowanie stdout na stderr (brak buforowania)
to wynik w konsoli będzie identyczny z:
Zamiast > można użyć >>, w tym wypadku nic to nie zmieni.