Skocz do zawartości
atsiv

Bash + Zenity - skrypty bash w trybie graficznym

Rekomendowane odpowiedzi

Już podaje:

 

plik txt | zenity --list --radiolist --column " " ...case $?   1) zenity --info --text "super" ;;   0) zenity --error --text "anulowałeś" ;;   -1) zenity --warning --text "nic nie zaznaczyłeś" ;;esac

W pliku txt znajdują się jakieś opcje do wyboru i na pewno wiesz o co chodzi.

Edytowane przez atsiv

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Gość <account_deleted>

No powiem szczerze, że nie do końca jarzyłem ocb po wcześniejszym opisie bo u mnie to trochę inaczej działa. Prawdopodobnie znalazłeś tutorial przestarzały, czyli dot. starszej wersji zenity.

Zasada number one: sprawdź co wyrzuca program zanim zaczniesz wykorzystywać rezultaty jego działania.

No a po oblukaniu rezultatów wniosek nasuwa się sam:

#!/bin/bashcolumndesc='--column "" --column "Num" --column "Name" --column "Describtion"'list=' \. 1 row1 desc1 \. 2 row2 desc2 \. 3 row3 desc3 \. 4 row4 desc4'IFS="|"selection=( $(evaluate "zenity --list --multiple --checklist --print-column=3 --text="Select" $columndesc $list ") )ret=$?; numsel=${#selection[*]}unset IFSecho "RetVal:$ret , NumSelected:$numsel , List: ${selection[*]}"exit 0

;)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

No miał kilka lat... Dzięki i powiem Ci, że zacząłem podobnie kombinować ;)

 

Hmm... wget www 2> abc i powstał mi pliczek, były tam % pobranego pliku i wykorzystałem go do zbudowania własnego paska postępu...

 

>wget www 2>&1 | sed -u 's/^.* \([0-9]\+%\).*$/\1/' | zenity --progress

 

Trybi u mnie, ale nie wiem jak z aptem działać... Np. apt-get update 2> abc nie daje postępu w procentach, tzn. terminal widzi, ale plik już nie.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Gość <account_deleted>

To dla tego, że apt nie wysyła procentów do pipe, tzn nie do końca. Stary patent do rysowania pasków postępu i procentów bez scrolowania terminala - z użyciem ANSI escape codes. Ponieważ normalnie dane z pipe są pobierane porcjami które najprościej mówiąc są określone przez IFS, to nie widać znaków które zostały "wydrukowane" a za chwilę skasowane przypomocy kodów ANSI. Na chwilę obecną nie mam gotowego pomysłu jak to obejść, ale na pewno będzie to coś w takim stylu:

- przełączenie terminala w tryb raw (np. stty -raw), co powoduje że przerwania są generowane po każdym znaku i dzięki temu można nie tylko wychwycić kasowane znaki, ale również sekwencje ANSI. W takim przypadku można odczytać pojedyńcze bajty np przez dd.

- odczytywać pojedyńcze znaki przez 'read -r -n1' lub 'read -a' ale tu prawdopodobnie trzeba będzie powalczyć z IFS i opcjami basha.

 

Inne wyjście: użyć innego front-endu dla apta.

 

edit:

czasu mało...

niedokładna symulacja tego co robi apt:

#!/bin/bash{ #apt-get output simulatori=0echo "selecting previously deselected package \"simulation\" ..."echowhile (( $i <= 100 )); do	echo -en \			"\033[1A\033[28DInstalling packages: $(($i/10))...   \033[1B" \			"\033[30D[$i%]"	sleep 0.5	((i+=10))doneecho -en "\033[28DInstallation successful!\n"; }exit 0
trzeba jeszcze powalczyć... Edytowane przez tomazzi

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Gość <account_deleted>

eee, procenty też lecą ;) Ale nie o to chodzi - ten kawałek skryptu daje podobne efekty w terminalu ale nie w pipe niestety - to już nieco bardziej skomplikowane.

 

Mam pewien pomysł: mozna uzyskać całkiem dobry efekt w taki sposób:

- odpalasz apta w dry-run,

- liczysz ile linii wypluł i obliczasz ile % przypada na jedną linię

- odpalasz apta "normalnie" i generujesz % w oparciu to co wyrzuciło dry-run.

Nie będzie to piękne, ale będzie działać (i jest stosunkowo proste).

dry-run jest zazwyczaj bardzo szybkie, ponieważ nic nie pobiera ale można przyjąć że jest to np. 5% całości operacji.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...