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ń:

Kod: Zaznacz cały

wynik:
a powinno być:

Kod: Zaznacz cały

wynik: 5 

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:

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.