Jak dodać GUI do skryptów powłoki Linux

Opublikowany: 2022-01-29

Okno informacji zenity uruchamiane z terminala Ubuntu.

W skryptach Bash możesz używać okien GUI, suwaków, przycisków opcji, pasków postępu i nie tylko. Dowiedz się, jak korzystać z zestawu narzędzi zenity i odświeżyć swoje skrypty Bash. Pokażemy Ci jak.

Skrypty Bash to potężny język programowania, a ponieważ są wbudowane w powłokę Bash, są łatwo dostępne dla każdego. Jest to łatwy język do rozpoczęcia programowania. Ponieważ jest interpretowany, nie musisz kompilować swoich skryptów. Jak tylko zmodyfikujesz plik skryptu i uczynisz go wykonywalnym, możesz go uruchomić. Dzięki temu cykl kodowania, uruchamiania i debugowania jest całkiem wydajny.

Istnieją dwa główne narzekania ludzi na skrypty Bash, a pierwszy to szybkość. Ponieważ powłoka Bash interpretuje polecenia w skrypcie, nie są one wykonywane tak szybko, jak skompilowany kod. Jest to jednak jak narzekanie, że traktor nie jest tak szybki jak samochód; są przeznaczone do różnych rzeczy.

Istnieją jednak dwa rodzaje prędkości. Często można ułożyć szybki skrypt i użyć go do wykonania zadania znacznie szybciej niż tworzenie rozwiązania w skompilowanym języku, takim jak C.

Drugi zarzut, jaki ludzie mają do skryptów Bash, to interfejs użytkownika — jest to okno terminala. Oczywiście czasami interfejs nie ma znaczenia. Jeśli jedyną osobą, która kiedykolwiek użyje skryptu jest jego autor, interfejs prawdopodobnie nie jest tak ważny. Nie ma też znaczenia dla skryptów, które wykonują przetwarzanie w tle i wsadowe. Zazwyczaj takie skrypty nie wymagają dużej (jeśli w ogóle) interakcji użytkownika.

Reklama

Są sytuacje, kiedy potrzebujesz czegoś bardziej intuicyjnego i nowoczesnego niż okno terminala. Większość ludzi zna graficzny interfejs użytkownika (GUI). Aby zapewnić użytkownikom jak najbardziej bezproblemowe wrażenia, musisz tworzyć i używać elementów GUI ze swoich skryptów.

Aplikacja Zenity

zenity pozwala na włączenie szerokiej gamy elementów interfejsu graficznego do skryptów Bash. To potężny zestaw narzędzi, który nadaje Twoim skryptom nowoczesny wygląd i nowoczesny, znajomy wygląd.

zenity jest preinstalowane w dystrybucjach Ubuntu, Fedora i Manjaro. Jest częścią GNOME. Jeśli używasz KDE, możesz zamiast tego sprawdzić kdialog , chociaż zenity działa w każdym środowisku graficznym.

W przykładach w tym artykule pokazano, jak tworzyć różne okna dialogowe z wiersza polecenia, jak przechwytywać ich wartości zwracane i wybory użytkownika w zmiennych oraz jak używać okien dialogowych w skryptach.

Kończymy małą aplikacją, która wykorzystuje wszystkie trzy rodzaje okien dialogowych.

Okno dialogowe kalendarza

Okno dialogowe kalendarza pozwala wybrać datę. Aby stworzyć taki z zenity , wystarczy jedno polecenie składające się z dwóch słów:

 zenity – kalendarz 
Reklama

Pojawi się okno dialogowe kalendarza. Ma wszystkie funkcje, których można oczekiwać od standardowego selektora dat. Możesz zmienić miesiąc i rok, a następnie kliknąć dzień, aby wybrać tę datę. Domyślnie dzisiejsza data jest podświetlona, ​​gdy pojawia się okno.

Okno kalendarza Zenity na lipiec 2019 r.

Kliknij „OK”, aby zamknąć okno dialogowe i wybrać podświetloną datę. Dwukrotne kliknięcie daty robi to samo.

Jeśli nie chcesz dokonywać wyboru daty, kliknij „Anuluj”, naciśnij klawisz „Esc” na klawiaturze lub zamknij okno dialogowe.

Okno kalendarza zenity z zaznaczonym 19 sierpnia 2019 r.

W powyższym przykładzie wybrano 19 sierpnia 2019. Jeśli użytkownik kliknie „OK”, kalendarz zamknie się, a wybrana data zostanie wydrukowana w oknie terminala.

Data wybrana w kalendarzu (19.08.2019) pokazana w oknie terminala.

Możesz zignorować wiersz „GTKDialog mapowany bez przejściowego rodzica. To jest odradzane”.

GTK to skrót od GIMP Tool Kit, czyli zestawu narzędzi używanego do tworzenia interfejsu GNOME. Został pierwotnie opracowany przez autorów programu GNU Image Manipulation Program (GIMP). GNU to skrót od GNU's Not Unix.

Reklama

Silnik GTK ostrzega autorów zenity , że użyli komponentu GTK w niestandardowy sposób.

Przechwytywanie wartości daty

Drukowanie daty na terminalu niewiele dla nas robi. Jeśli zamierzamy wywołać ten kalendarz z jednego z naszych skryptów, musimy przechwycić wybraną wartość daty, abyśmy mogli zrobić z nią coś przydatnego w naszym skrypcie. Dostosujemy również nieco kalendarz.

W kalendarzu użyjemy następujących opcji. Wszystkie muszą być używane z flagą z podwójną kreską „–”:

  • –text : określa ciąg tekstu do wyświetlenia w kalendarzu. Zastępuje domyślne „Wybierz datę z dołu”.
  • –title : Ustawia tytuł okna dialogowego kalendarza.
  • –day : Ustawia dzień wybrany podczas otwierania kalendarza.
  • –miesiąc : Ustawia miesiąc wybrany podczas otwierania kalendarza.
  • –rok : Ustawia rok wybrany podczas otwierania kalendarza.

Używamy zmiennej o nazwie ChosenDate , aby przechwycić datę zwróconą z kalendarza. echo $ChosenDate , aby wyświetlić tę datę w oknie terminala.

Tak, osiągnęliśmy ten sam wynik w poprzednim przykładzie, ale tutaj mamy wybraną datę zapisaną w zmiennej. W poprzednim przykładzie został wydrukowany i zapomniany.

 ChosenDate=$(zenity -- kalendarz --text "Wybierz datę" --title "How-To Geek Rota" --dzień 1 -- miesiąc 9 --rok 2019); echo $Wybrana data 

Teraz kalendarz wyświetla nasz monit i tytuł okna. Data jest ustawiona na wybraną przez nas datę rozpoczęcia, a nie na dzisiejszą datę.

kalendarz zenity z wybraną datą rozpoczęcia (1 września 2019 r.).

Reklama

Możemy również dostosować format ciągu daty zwracanego po dokonaniu wyboru. Po opcji --date-format musi następować specyfikator formatu. Jest to ciąg tokenów definiujących dane i formaty, które mają zostać uwzględnione w wyniku. Tokeny są takie same, jak te używane w funkcji języka C strftime() i jest ich ogromny wybór.

Tokeny, których używamy to:

  • %A : Pełna nazwa dnia tygodnia.
  • %d : dzień miesiąca jako cyfra.
  • %m : miesiąc jako cyfra.
  • %y : Rok w postaci dwóch cyfr (bez wieku).
 ChosenDate=$(zenity -- calendar --text "Wybierz datę" --title "How-To Geek Rota" --date-format="%A %d/%m/%y" --day 1 -- miesiąc 9 – rok 2019); echo $Wybrana data 

Ktoś wybiera datę:

Okno kalendarza zenity z wybranym 16 września 2019 r.

A data jest zwracana w naszym formacie. Pokazuje nazwę dnia tygodnia, po której następuje data w porządku europejskim: dzień, miesiąc, rok.

Okno dialogowe wyboru pliku: wybór pliku

Okna dialogowe wyboru plików są dość złożone. Ludzie mogą przeglądać system plików, podświetlać plik lub pliki, a następnie kliknąć "OK", aby wybrać te pliki lub całkowicie anulować wybór.

zenity zapewnia wszystkie te funkcje i nie tylko. Jest tak samo łatwy w użyciu, jak okno dialogowe kalendarza.

Nowe opcje, z których będziemy korzystać, to:

  • –file-selection : Mówi zenity , że chcemy użyć okna dialogowego wyboru pliku.
  • –wiele : Pozwala komuś wybrać więcej niż jeden plik.
  • –file-filter : informuje okno dialogowe plików, jakie typy plików mają być wyświetlane.
 zenity --file-selection --tile "How-To Geek" --multiple --file-filter='*.mm *.png *.page *.sh *.txt' 

Okno dialogowe wyboru pliku działa tak samo, jak każde inne okno wyboru pliku.

Okno dialogowe sekcji pliku zenity z wybranym folderem.

Użytkownik może przeglądać system plików i wybrać wybrany przez siebie plik.

Okno dialogowe wyboru pliku zenity z wybranym plikiem

Reklama

Przeszliśmy do nowego katalogu i wybraliśmy plik o nazwie „button_hybrid.png”.

Po kliknięciu "OK" okno dialogowe wyboru pliku zostanie zamknięte, a nazwa pliku i ścieżka zostaną wydrukowane w oknie terminala.

Jeśli musisz użyć nazwy pliku w jakimkolwiek dalszym przetwarzaniu, możesz przechwycić ją w zmiennej, tak jak w przypadku daty z kalendarza.

Okno dialogowe wyboru pliku: Zapisywanie pliku

Jeśli dodamy jedną opcję, możemy zmienić okno dialogowe wyboru pliku w okno dialogowe zapisywania pliku. Opcją jest --save . Użyjemy również opcji --confirm-overwrite . To monituje osobę o potwierdzenie, że chce nadpisać istniejący plik.

 Response=$(zenity --file-selection --save --confirm-overwrite); echo $Odpowiedź 

Pojawi się okno dialogowe zapisywania pliku. Zauważ, że istnieje pole tekstowe, w którym ktoś może wpisać nazwę pliku.

okno dialogowe zapisywania pliku zenity.

Użytkownik może przejść do wybranej przez siebie lokalizacji w systemie plików, podać nazwę pliku lub kliknąć istniejący plik, aby go zastąpić.

okno dialogowe zapisywania pliku zenity z wybranym istniejącym plikiem.

Reklama

W powyższym przykładzie użytkownik podświetlił istniejący plik.

Kiedy kliknie „OK”, pojawi się okno dialogowe z prośbą o potwierdzenie, że chce zastąpić istniejący plik. Zauważ, że nazwa pliku pojawia się w ostrzegawczym oknie dialogowym. To ten rodzaj dbałości o szczegóły, który nadaje zenity profesjonalny wygląd.

Gdybyśmy nie użyli opcji --confirm-overwrite , plik zostałby po cichu nadpisany.

okno dialogowe potwierdzenia nadpisywania zenity.

Nazwa pliku jest przechowywana w zmiennej Response , która jest wypisywana w oknie terminala.

Okna dialogowe powiadomień

Dzięki zenity włączanie do skryptów zgrabnych okien dialogowych powiadomień jest bezproblemowe. Dostępne są standardowe okna dialogowe, które można wywołać, aby przekazać użytkownikowi informacje, ostrzeżenia, komunikaty o błędach i pytania.

Aby utworzyć okno dialogowe komunikatu o błędzie, użyj następującego polecenia:

 zenity --error --width 300 --text "Odmowa uprawnień. Nie można zapisać do pliku."

Nowe opcje, z których korzystamy to:

  • –error : Mówi zenity , że chcemy użyć okna dialogowego błędu.
  • –width : Ustawia początkową szerokość okna.

Reklama

Pojawi się okno dialogowe błędu o określonej szerokości. Używa standardowej ikony błędu GTK.

okno dialogowe błędu zenity.

Aby utworzyć okno dialogowe informacji, użyj następującego polecenia:

 zenity --info --width 300 --text "Aktualizacja zakończona. Kliknij OK, aby kontynuować."

Nowa opcja, której używamy, to --info , która nakazuje zenity utworzyć okno dialogowe informacji.

okno dialogowe informacji zenity.

Aby utworzyć okno dialogowe pytania, użyj następującego polecenia:

 zenity --question --width 300 --text "Czy chcesz kontynuować?"; echo $?

Nowa opcja, której używamy, to --question , która nakazuje zenity utworzyć okno dialogowe z pytaniem.

$? jest parametrem specjalnym. Przechowuje wartość zwracaną z ostatnio wykonanego potoku pierwszego planu. Ogólnie rzecz biorąc, jest to wartość z ostatnio zamkniętego procesu. Wartość zerowa oznacza „OK”, a wartość jedna lub więcej oznacza „Anuluj”.

Reklama

Jest to ogólna technika, którą możesz zastosować do dowolnego okna dialogowego zenity . Zaznaczając tę ​​wartość w skrypcie, możesz określić, czy dane zwrócone z okna dialogowego powinny być przetwarzane, czy ignorowane.

okno dialogowe pytania zenity.

Klikaliśmy „Tak”, więc kod zwrotny to zero wskazujące „OK”.

Aby utworzyć okno dialogowe ostrzeżenia, użyj następującego polecenia:

 zenity --warning --title „Mało miejsca na dysku twardym” --width 300 --text „Może być za mało miejsca na dysku twardym, aby zapisać kopię zapasową”.

Nowa opcja, której używamy, to --warning , która nakazuje zenity utworzyć okno dialogowe z ostrzeżeniem.

Pojawi się okno dialogowe ostrzeżenia. To nie jest pytanie, więc ma tylko jeden przycisk.

okno dialogowe ostrzeżenia zenity.

Okno dialogowe postępu

Możesz użyć okna dialogowego postępu zenity , aby wyświetlić pasek postępu, który wskazuje, jak blisko ukończenia jest twój skrypt.

Reklama

Pasek postępu jest zaawansowany zgodnie z wartościami, które są do niego przesyłane z twojego skryptu. Aby zademonstrować zasadę, użyj następującego polecenia:

 (dla i w $(seq 0 10 100); wykonaj echo $i; śpij 1; gotowe) 

Polecenie wygląda następująco:

  • Polecenie seq przechodzi przez sekwencję od 0 do 100, w krokach co 10.
  • Na każdym kroku wartość jest przechowywana w zmiennej i . To drukuje w oknie terminala.
  • Polecenie zatrzymuje się na jedną sekundę z powodu polecenia sleep 1 .

Możemy użyć tego w oknie dialogowym postępu zenity , aby zademonstrować pasek postępu. Zauważ, że przesyłamy dane wyjściowe poprzedniego polecenia do zenity:

 (dla i w $(seq 0 10 100); wykonaj echo $i; śpij 1; gotowe) | zenity --progress --title "How-To Geek" -- automatyczne zamykanie 

Nowe opcje, z których korzystamy to:

  • –progress : Mówi zenity , że chcemy użyć okna dialogowego postępu.
  • –auto-close : zamyka okno dialogowe, gdy pasek postępu osiągnie 100 procent.

Pojawi się okno dialogowe postępu, a pasek przesuwa się w kierunku 100 procent, zatrzymując się na jedną sekundę między każdym krokiem.

okno dialogowe postępu zenity.

Możemy użyć tej koncepcji potokowania wartości do zenity , aby uwzględnić w skrypcie okno dialogowe postępu.

Wpisz ten tekst w edytorze i zapisz go jako „progress.sh”.

 !/kosz/bash

funkcja lista robocza () {

echo "# Pierwszy element pracy" 
echo "25"
spać 1

echo "# Drugi element pracy" 
echo "50"
spać 1

echo "# Trzeci element pracy" 
echo "75"
spać 1

echo "# Ostatnia praca" 
echo "100"
spać 1

}

lista zadań | zenity --progress --title "How-To Geek" --auto-close

wyjście 0

Oto podział skryptu:

  • Skrypt definiuje funkcję o nazwie work-list . Tutaj umieszczasz swoje polecenia i instrukcje, aby wykonywać prawdziwą pracę. Zastąp każde z poleceń sleep 1 swoimi prawdziwymi.
  • zenity akceptuje linie echo "# ..." i wyświetla je w oknie dialogowym postępu. Zmień tekst tych wierszy, aby przekazywały użytkownikowi komunikaty informacyjne.
  • Linie echo zawierające liczby, takie jak echo "25" , są również akceptowane przez zenity i ustawiają wartość paska postępu.
  • Funkcja listy roboczej jest wywoływana i przesyłana do zenity .

Użyj tego polecenia, aby skrypt był wykonywalny:

 chmod +x postęp.sh 

Użyj tego polecenia, aby uruchomić skrypt:

 ./progress.sh 

Skrypt jest uruchamiany, a wiadomość tekstowa zmienia się w miarę wykonywania każdej fazy skryptu. Pasek postępu przesuwa się stopniowo w kierunku 100 procent.

Okno dialogowe paska postępu zenity.

Okno dialogowe Skala

Okno dialogowe skali pozwala przesunąć suwak, aby wybrać wartość liczbową. Oznacza to, że nie może wprowadzić wartości, która jest zbyt wysoka lub niska.

Nowe opcje, z których korzystamy to:

  • –scale : Mówi zenity , że chcemy użyć okna dialogowego skali.
  • –min-value : Ustawia minimalną wartość skali.
  • –max-value : Ustawia maksymalną wartość skali.
  • –step : Ustawia wielkość przesunięcia suwaka, gdy używane są klawisze strzałek. Nie wpływa to na ruchy suwaka, jeśli ktoś używa myszy.
  • –wartość : Ustawia początkową wartość i położenie suwaka.

Oto polecenie, którego używamy:

 Response=$(zenity --scale --title "How-To Geek" --text "Wybierz powiększenie" --min-value=0 --max-value=30 --step=3 --value15); echo $Odpowiedź 

Reklama

Pojawi się okno dialogowe suwaka z suwakiem ustawionym na 15.

okno dialogowe skali zenity.

Użytkownik może przesunąć suwak, aby wybrać nową wartość.

okno dialogowe skali zenity z wyborem użytkownika

Kiedy kliknie „OK”, wartość zostanie przeniesiona do zmiennej Response i wydrukowana w oknie terminala.

Okno dialogowe wprowadzania

Okno dialogowe wprowadzania umożliwia wprowadzanie tekstu.

Nowe opcje, z których korzystamy to:

  • –entry : Informuje zenity , że chcemy użyć okna dialogowego wprowadzania.
  • –entry-text : możesz użyć tej opcji, jeśli chcesz wpisać sugerowaną wartość w polu wprowadzania tekstu. Używamy „” do wymuszenia pustego pola. Nie jest to ściśle wymagane, ale chcieliśmy udokumentować tę opcję.

Pełne polecenie wygląda tak:

 Response=$(zenity --entry --text "Wprowadź wyszukiwany termin" --title "Jak to maniak" --entry-text=""); echo $Odpowiedź 

Pojawi się proste okno dialogowe zawierające pole do wprowadzania tekstu.

okno dialogowe wprowadzania zenity.

Ktoś może wpisywać i edytować tekst.

Okno dialogowe wpisu zenity z wpisanym tekstem w polu tekstowym.

Kiedy kliknie „OK”, wpisana przez niego wartość zostaje przypisana do zmiennej Odpowiedź. Używamy echo do wypisania wartości zmiennej w oknie terminala.

Kładąc wszystko razem

Połączmy te techniki i stwórzmy funkcjonalny skrypt. Skrypt wykona skanowanie informacji o sprzęcie i przedstawi wyniki użytkownikowi w przewijanym oknie tekstowym. Może wybrać długi lub krótki typ skanowania.

Reklama

W tym skrypcie użyjemy trzech typów okien dialogowych, z których dwa są dla nas nowe:

  • Pierwszym z nich jest okno dialogowe listy. Pozwala komuś dokonać wyboru.
  • Drugie to okno dialogowe postępu, które informuje użytkownika, że ​​coś się dzieje, i powinien poczekać.
  • Trzecie to tekstowe okno informacyjne, które wyświetla użytkownikowi wyniki.

Wprowadź ten tekst w edytorze i zapisz go jako „hardware-info.sh”.

 #!/kosz/bash

# Wyświetl listę sprzętu dla tego komputera

Plik tymczasowy = $ (mktemp)

ListType=`zenity --width=400 --height=275 --list --radiolist \
     --title „Skanowanie sprzętu” \
     --text „Wybierz typ skanowania:” \
     --kolumna „Wybierz” \
     --kolumna „Typ skanowania” PRAWDA „Krótki” FAŁSZ „Długi”`

jeśli [[ $? -równ 1 ]]; następnie

  # nacisnęli Anuluj lub zamknęli okno dialogowe 
  zenity --error --title="Odrzucono skanowanie" --width=200 \
       --text="Skanowanie sprzętu pominięte"
  wyjście 1
 
elif [ $ListType == "Krótki" ]; następnie

  # wybrali krótki przycisk opcji 
  Flag="--krótki"
 
w przeciwnym razie

  # wybrali długi przycisk radiowy 
  Flaga="" 
fi

# wyszukaj informacje o sprzęcie z odpowiednią wartością w $Flag
hwinfo $Flaga | trójnik >(zenity --width=200 --height=100 \
     --title="Zbieranie informacji" --progress \
     --pulsate --text="Sprawdzanie sprzętu..." \
     --auto-kill --auto-close) > ${TempFile}
 
# Wyświetlaj informacje o sprzęcie w przewijanym oknie
zenity --width=800 --height=600 \
     --title „Szczegóły sprzętu” \
     --text-info --filename="${TempFile}"
 
wyjście 0

Użyj tego polecenia, aby uczynić go wykonywalnym:

 chmod +x informacje o sprzęcie.sh 

"chmod +x haredware-info.sh w oknie terminala".

Ten skrypt tworzy plik tymczasowy, a nazwa pliku jest przechowywana w zmiennej TempFile:

 Plik tymczasowy = $ (mktemp)

Skrypt używa opcji --list do utworzenia okna dialogowego zenity zwanego oknem dialogowym listy. Znaki „\” na końcu linii informują skrypt, aby traktował je jako jedną długą linię, która jest owinięta dookoła. Oto proces:

  • Określamy szerokość i wysokość okna.
  • Okno dialogowe listy obsługuje kolumny. Opcja --radiolist powoduje, że pierwsza kolumna jest kolumną przycisków opcji.
  • Ustawiamy tytuł i monit tekstowy dla okna.
  • Ustawiamy tytuł pierwszej kolumny na „Wybierz”. Treścią tej kolumny będą przyciski opcji.
  • Ustawiamy tytuł drugiej kolumny na „Wybierz” i podajemy zawartość drugiej kolumny. Ta kolumna zawiera dwie etykiety tekstowe: „Krótki” i „Długi”. Wskaźniki TRUE i FALSE oznaczają, że opcja „Krótki” jest domyślnie zaznaczona, gdy pojawi się okno dialogowe.
  • Przechowujemy wynik z tego okna dialogowego w zmiennej o nazwie ListType .
 ListType=`zenity --width=400 --height=275 --list --radiolist \ 
     --title „Skanowanie sprzętu” \ 
     --text „Wybierz typ skanowania:” \ 
     --kolumna „Wybierz” \ 
     --kolumna „Typ skanowania” PRAWDA „Krótki” FAŁSZ „Długi”`

Jeśli użytkownik naciśnie „Anuluj”, nie musimy sprawdzać wartości w ListType, możemy po prostu wyjść. Jeśli naciśnie „OK”, musimy dowiedzieć się, czy wybrał przycisk radiowy „Krótki” czy „Długi”:

  • Specjalny parametr $? równa się zero, jeśli użytkownik nacisnął „OK”. Jest równy jeden, jeśli nacisnął „Anuluj” lub zamknął okno.
  • Jeśli jest równy jeden, skrypt wyświetla okno dialogowe z informacjami o błędzie i kończy działanie. Jeśli naciśnie „OK”, przejdziemy do testowania wartości w zmiennej ListType .
  • Jeśli zmienna ListType przechowuje wartość „Short”, skrypt ustawia zmienną o nazwie Flag na wartość „–short”.
  • Jeśli zmienna ListType nie zawiera wartości „Short”, musi zawierać wartość „Long”. Skrypt ustawia zmienną o nazwie Flag na równą „”, która jest pustym ciągiem.
  • Skrypt używa zmiennej Flag w następnej sekcji.
 jeśli [[ $? -równ 1 ]]; następnie 

  # nacisnęli Anuluj lub zamknęli okno dialogowe 
  zenity --error --title="Skanowanie odrzucone" --width=200 \ --text="Skanowanie sprzętu pominięte" 
  wyjście 1 

elif [ $ListType == "Krótki" ]; następnie 

 # wybrali krótki przycisk opcji 
 Flag="--krótki" 

w przeciwnym razie 

 # wybrali długi przycisk radiowy 
 Flaga="" 
fi
Reklama

Teraz, gdy skrypt wie, jakiego typu skanowania chce użytkownik, możemy wykonać skanowanie informacji o sprzęcie:

  • Skrypt wywołuje polecenie hwinfo i przekazuje mu wartość w zmiennej Flag .
  • Jeśli Flag zawiera „–short”, polecenie hwinfo wykonuje krótkie skanowanie. Jeśli wartość Flag to „”, nic nie przechodzi do hwinfo i wykonywane jest domyślne, długie skanowanie.
  • Skrypt przesyła dane wyjściowe z hwinfo do tee . tee wysyła dane wyjściowe do zenity i TempFile .
  • Skrypt tworzy okno dialogowe paska postępu. Ustawia szerokość i wysokość okna dialogowego oraz tekst tytułu i monitu.
  • Skrypt nie może wiedzieć z góry, ile informacji wygeneruje polecenie hwinfo , więc nie może ustawić paska postępu, aby przesuwał się poprawnie na 100 procent. Opcja --pulsate powoduje, że okno dialogowe postępu wyświetla ruchomy wskaźnik. To informuje użytkownika, że ​​coś się dzieje i powinien poczekać.
  • Opcja --auto-kill kończy działanie skryptu, jeśli ktoś kliknie „Anuluj”.
  • Opcja --auto-close powoduje automatyczne zamknięcie okna dialogowego postępu po zakończeniu monitorowania procesu.
 # wyszukaj informacje o sprzęcie z odpowiednią wartością w $Flag
hwinfo $Flaga | trójnik >(zenity --width=200 --height=100 \
     --title="Zbieranie informacji" --progress \
     --pulsate --text="Sprawdzanie sprzętu..." \
     --auto-kill --auto-close) > ${TempFile}

Po zakończeniu skanowania hwinfo skrypt wywołuje zenity w celu utworzenia okna dialogowego z informacjami tekstowymi z --text-info . Okno dialogowe informacji tekstowych wyświetla zawartość pliku TempFile :

  • Skrypt ustawia szerokość i wysokość okna dialogowego oraz tekst tytułu.
  • Opcja --flename służy do odczytywania zawartości pliku przechowywanego w zmiennej TempFIle .
 # Wyświetlaj informacje o sprzęcie w przewijanym oknie 
zenity --width=800 --height=600 \ 
     --title „Szczegóły sprzętu” \ 
     --text-info --filename="${TempFile}"

Gdy użytkownik zamknie okno dialogowe informacji tekstowych, skrypt zostanie zamknięty.

 wyjście 0

Odpalmy i spójrzmy.

 ./informacje-sprzętowe.sh 

Pojawi się pole listy. Opcja „Krótki” jest zaznaczona domyślnie.

Okno dialogowe listy z wybraną opcją „Krótki”.

Wybierzmy „Długie”, a następnie kliknijmy „OK”.

Okno dialogowe listy z wybraną opcją „Długie”.

Pojawi się okno postępu z przesuwanym wskaźnikiem. Pozostaje na ekranie aż do zakończenia skanowania sprzętu.

Okno postępu z przesuwanym wskaźnikiem.

Po zakończeniu skanowania sprzętu pojawi się okno dialogowe informacji tekstowych ze szczegółami ze skanowania.

Informacje o skanowaniu sprzętu w oknie dialogowym z informacjami tekstowymi.

Kliknij OK."

Reklama

Nawet zagorzały dżokej wiersza poleceń musi przyznać, że kilka okien dialogowych GUI może nadać skromnemu skryptowi Bash profesjonalny charakter.