ZENITY - uatrakcyjnij swoje skrypty
Transkrypt
ZENITY - uatrakcyjnij swoje skrypty
Formy dialogowe w środowisku Gnome Środowisko graficzne Gnome posiada wiele atrakcyjnych funkcji, które często nie są przez administratorów wykorzystywane. Jedną z nich jest dołączony zestaw form dialogowych o nazwie Zenity ( http://library.gnome.org/users/zenity/stable/ ). Formy dialogowe Zenity mogą (i powinny) być używane w celu ułatwienia użytkownikom oraz administratorom i operatorom systemu wykorzystywania skryptów powłokowych. Formy Zenity umożliwiają przekazywanie informacji do i ze skryptów przy użyciu intuicyjnych mechanizmów środowiska graficznego. Najprostszą funkcją, które można zrealizować za pomocą form Zenity jest funkcja informowania użytkownika. Do wyświetlania informacji służą następujące formy dialogowe: Info: Forma dialogowa wyświetlająca przygotowany wcześniej komunikat: zenity --info –text="Kopiowanie zakończone." Informacja będzie wyświetlana do czasu naciśnięcia myszką „przycisku” OK. Dalsze wykonywanie (lub zakończenie) skryptu, z którego wywołano formę informacyjną zostanie wstrzymane do czasu „naciśnięcia” OK. Forma informacyjna nie jest przeznaczona do przekazywania danych do skryptu. Question: Forma wymuszająca odpowiedź na dowolne pytanie: zenity --question --text="Czy na pewno chcesz kontynuować?" Forma „pytanie” kończy swoje działanie po wybraniu „Anuluj” lub „OK”. W przypadku Uzupełniające materiały szkoleniowe Tomasz Barbaszewski, Kraków 2012 Strona 1 z 9 Formy dialogowe w środowisku Gnome naciśnięcia przycisku „OK” kodem wyjścia formy jest „0”, zaś jeśli naciśniemy „Anuluj” forma zakończy działanie z kodem „1”. Kod wyjścia znajdzie się w specjalnej zmiennej powłokowej $?: zenity --question --text="Czy na pewno chcesz kontynuować?";echo $? W zależności od tego, jaki przycisk naciśniemy myszką w oknie terminala, z którego wywołaliśmy formę pojawi się „0” lub „1”: Warning: Forma tak jest bardziej zbliżona do formy „Info” niż do formy „Question”: zenity --warning --text="Czy na pewno chcesz kontynuować?" Uzupełniające materiały szkoleniowe Tomasz Barbaszewski, Kraków 2012 Strona 2 z 9 Formy dialogowe w środowisku Gnome Error: Ostatnią formą informacyjną jest forma przeznaczona do sygnalizacji błędu: zenity --error jeśli nie wprowadzimy własnego tekstu zostanie wyświetlona informacja standardowa: Notification: Forma różniąca się od pozostałych form informacyjnych – nie powoduje ona wyświetlenia nowego okna, lecz dodaje ikonkę (aktywator) na panelu Gnome. Ikonę aktywatora można wybrać w taki sposób, aby sugerowała ona rodzaj informacji. Jeśli naprowadzimy kursor myszki na ikonkę wyświetlony zostanie „dymek” z treścią podaną w opcji „text”: zenity --notification --window-icon="info" --text="Coś trzeba zrobić" #1 zenity --notification --window-icon="warning" 1 --text="Nie rób tego" #2 2 Jeśli „naciśniemy” ikonkę na pasku forma „Notification” zakończy pracę z kodem wyjścia „0”, co umożliwi kontynuowanie skryptu, którego została wywołana forma „Notification”. Uzupełniające materiały szkoleniowe Tomasz Barbaszewski, Kraków 2012 Strona 3 z 9 Formy dialogowe w środowisku Gnome Progress (pasek postępu): Forma dialogowa umożliwiająca wyświetlania okna z paskiem postępu. Musi ona współpracować ze skryptem powłokowym. Współpraca jest realizowana w następujący sposób: #!/bin/sh ( echo "10" ; sleep 1 echo "# Pobieranie plików uaktualnienia" ; sleep 1 echo "20" ; sleep 2 echo "# Tworzenie katalogów" ; sleep 1 echo "50" ; sleep 1 echo "Usuwanie poprzedniej wersji" ; sleep 1 echo "75" ; sleep 3 echo "# Start usług" ; sleep 1 echo "100" ; sleep 1 ) | zenity --progress \ --title="Uaktualnianie oprogramowania" \ --text="Sprawdzanie wersji..." \ --percentage=0 if [ "$?" = -1 ] ; then zenity --error \ --text="Błąd uaktualnienia. Koniec." fi Jak widać z analizy powyższego skryptu zenity czyta dane ze standardowego wejścia „linia po linii”. Jeśli linia rozpoczyna się od znaku „#” to następujący po tym znaku tekst jest przejmowany do wyświetlenia (nad paskiem postępu). Jeśli linia zawiera jedynie liczbę to zostanie wyświetlony pasek postępu o długości (w procentach) określonej przez tą liczbę. Taka obsługa paska postępu pozwala na wstawianie „punktów kontrolnych” w określenie etapu, na jakim program się znajduje. Oczywiście w miejsce polecań „sleep” należy wstawić odpowiednie procedury realizujące kolejne etapy działań (w tym przypadku uaktualnienia programu). Uzupełniające materiały szkoleniowe Tomasz Barbaszewski, Kraków 2012 Strona 4 z 9 Formy dialogowe w środowisku Gnome Text Entry – wprowadzenie danej: Forma dialogowa umożliwiająca wprowadzenie danej tekstowej do skryptu. Zenity otwiera okno zawierające zdefiniowany tekst oraz pole umożliwiające wprowadzanie znaków w klawiatury: Wprowadzona dana jest traktowana jako tekst i przekazywana na standardowe wyjście. Dana może być podstawiona do zmiennej: [tomekb@main ~]$ ZMIENNA=`zenity --entry --text="Wprowadż daną:"` [tomekb@main ~]$ echo $ZMIENNA 123 Wprowadzanie danej można „utajnić” wykorzystując opcję --hide-text: Uzupełniające materiały szkoleniowe Tomasz Barbaszewski, Kraków 2012 Strona 5 z 9 Formy dialogowe w środowisku Gnome List – wybór elementu z listy: Forma list wyświetla listę elementów ułożonych wierszach zawierających kolumny. W przykładowym skrypcie pierwsza kolumna zawiera przełączniki „radio box” (oznaczony jako TRUE określa działanie domyślne), druga funkcję, a trzecia opis tej funkcji. Po dokonaniu wyboru i naciśnięciu przycisku OK na standardowe wyjście zostanie wysłana zawartość pierwszej opisanej kolumny i forma zakończy pracę z kodem wyjścia „0”. W przypadku naciśnięcia przycisku „Anuluj” forma zakończy pracę z kodem wyjścia „1”: #!/bin/sh zenity --list \ --title="Wybierz funkcję": \ --radiolist \ --column="Wybór" --column="Nazwa" --column="Opis" \ TRUE Usu "Usuń plik" \ FALSE Przenie "Przenieś plik" \ FALSE Skompresuj "Zarchiwizuj plik" Użycie formy List nie odbiega praktycznie niczym od formy Text Entry. Uzupełniające materiały szkoleniowe Tomasz Barbaszewski, Kraków 2012 Strona 6 z 9 Formy dialogowe w środowisku Gnome File Selection: Bardzo przydatną formą dialogową jest File Selection: Wyświetla ona listę plików i podkatalogów w bieżącym katalogu umożliwiając dokonanie wyboru. Jeżeli wybierzemy podkatalog, to wówczas zostanie wyświetlona jego zawartość, zaś jeśli wybranym obiektem będzie plik jego nazwa wraz z pełną ścieżką zostanie przekazana na standardowe wyjście: [tomekb@main ~]$ zenity --file-selection /home/tomekb/.thunderbird/appreg [tomekb@main ~]$ Uzupełniające materiały szkoleniowe Tomasz Barbaszewski, Kraków 2012 Strona 7 z 9 Formy dialogowe w środowisku Gnome Kalendarz: Forma dialogowa umożliwiająca wybór daty: zenity –calendar Forma wyświetla kalendarz z zaznaczoną aktualną datą. Za pomocą myszki można wybrać dowolną datę. Po „naciśnięciu” przycisku OK zaznaczona data jest przekazywana na standardowe wyjście: [tomekb@main ~]$ zenity --calendar 28.01.2012 Format przekazywanej daty można wybrać za pomocą opcji --date-format. Musi on odpowiadać wymaganiom funkcji strftime, na przykład: %A %d/%m/%y. Uzupełniające materiały szkoleniowe Tomasz Barbaszewski, Kraków 2012 Strona 8 z 9 Formy dialogowe w środowisku Gnome Uwagi końcowe: Opcje ogólne (akceptowane przez wszystkie formy dialogowe zenity): --title=tytuł --window-icon=ścieżka_do_ikony --width=szerokość_okna --height=wysokość_okna --timeout=czas_otwarcia_okna zenity --about wyświetla informacja o zenity: Wyświetlona forma dialogowa pozwala także uzyskać dostęp do informacji licencyjnych (GPL2) oraz do kontekstowego systemu pomocy (w języku angielskim). Kody wyjścia: 0 1 -1 5 program zakończony sukcesem (użytkownik nacisnął OK lub Close), opuszczenie programu (użytkownik nacisnął Cancel lub zamknął okno formy dialogowej), nieokreślony błąd, zamknięcie programu w wyniku osiągnięcia czasu określonego w opcji timeout. Analizując skrypty należy zwrócić uwagę na znak „\” zabraniający interpretacji końca linii. W łańcuchach tekstowych nie należy używać znaku „!” Uzupełniające materiały szkoleniowe Tomasz Barbaszewski, Kraków 2012 Strona 9 z 9