Chcę utworzyć środowisko oparte na terminalu, w którym można dostosować mój skrypt Bash . Chcę, aby wyglądało to tak:
terminal
text-user-interface
tempforFind Me In The Woods
źródło
źródło
dialog
to, co wydaje się używać.dialog
wyświetla menu (ale akceptuje akceptację) po uruchomieniu za pomocą wyrażenia zastępującego polecenie?whiptail
>dialog
takżetui
w trybie podzielonego okna (na przykład pokazuje rejestry, źródło i polecenialayout reg
oraztui reg vec
wyświetla rejestry wektorowe w oknie reg (w sposób nieelastyczny, aby ta część nie była naprawdę przydatna: /) , IDK, jeśli Redhat napisał łatkę, która dodała tę funkcję, a nawet ile ona ma latOdpowiedzi:
Odpowiedź użytkownika jest przechowywana w kodzie wyjścia, więc można ją wydrukować jak zwykle:
echo $?
(zwróć uwagę, że0
oznacza to „tak” i1
w świecie powłoki jest „nie”).Odnośnie innych pytań z sekcji komentarzy:
aby wstawić do okna dialogowego dane wyjściowe z niektórych poleceń, wystarczy użyć mechanizmu zastępowania poleceń
$()
, np .:aby dać użytkownikowi wiele możliwości, możesz użyć
--menu
opcji zamiast--yesno
aby zapisać dane wyjściowe użytkownika w zmiennej, należy użyć
--stdout
opcji lub zmienić deskryptor wyjściowy za pomocą--output-fd
lub ręcznie, np .:Ta sztuczka jest potrzebna, ponieważ
dialog
domyślnie wypisuje na stderr, a nie na standardowe wyjście.I jak zawsze
man dialog
jest twoim przyjacielem.źródło
?
zmiennej, spróbujecho $?
.parted -l
za pomocą okna dialogowego, prawdopodobnie--menu
lepszym wyborem jest opcja-yesno
. W takim przypadku musiałbyś zagrać trochę z deskryptorami, aby zapisać dane wyjściowe w zmiennej, na przykład:output=$(dialog --backtitle "Package configuration" --title "Configuration sun-java-jre" --menu "$(parted -l)" 15 40 4 1 "sda1" 2 "sda2" 3 "sda3" 3>&1 1>&2 2>&3 3>&-); echo $output
--stdout
opcji.man dialog
Zrzut ekranu w pytaniu wygląda jak whiptail (funkcjonalnie zredukowany program imitujący okno dialogowe , używający raczej traszki niż ncurses ). Sposób renderowania tytułu i przycisków jest wbudowany w każdy program, dzięki czemu wyglądają inaczej.
Oto skrypt, który powiela oryginalny zrzut ekranu, zarówno dla whiptail, jak i dialogu:
i dla porównania zrzut ekranu z whiptail:
i z dialogiem:
Oprócz odmiennego wyglądu tytułu i przycisków, okno dialogowe domyślnie używa różnych kolorów (choć można to konfigurować - patrz zrzuty ekranu ) i używa mniej linii na ekranie.
okna dialogowe (i whiptail) używają bibliotek do zarządzania wyświetlaniem linii, kolorów itp. Ale możesz także zobaczyć traszkę używaną w programie anakondy Red Hat jako bibliotekę współdzieloną o nazwie z python (o takim samym wyglądzie). W tym samym wierszu program konfiguracyjny jądra uruchomił się jako (skrócona) kopia okna dialogowego, a następnie przekształcił się w funkcje przy użyciu wspólnej biblioteki (bez oryginalnego
lxdialog
programu), podobnie jak traszka jest używana z pythona.From bash - możesz użyć okna dialogowego lub whiptail dla najczęściej używanych funkcji. Ktoś napisał opakowanie dla tych (w perlu), aby umożliwić skryptom łatwiejsze korzystanie z tych lub kilku innych, ale lepiej jest używać okna dialogowego bezpośrednio, ponieważ moduł perla jest zasadniczo wspólnym mianownikiem.
Źródła okien dialogowych zawierają przykłady wszystkich widżetów wraz z większością opcji wiersza poleceń:
Dalsza lektura:
źródło
Wierzę, że pakiet, którego szukasz, to ncurses .
Wikipedia opisuje ncurses następująco:
Jest szeroko stosowany na przykład w narzędziu konfiguracyjnym jądra menuconfig:
Ponieważ używasz bash, możesz użyć Bash Simple Curses (jak wspomniano w Runium w komentarzu poniżej).
źródło
ncurses
jest biblioteką C. (Jeśli dobrze rozumiem) OP chce środowiska skryptowego (dla bash).menuconfig
jest napisane w C. Jako alternatywę dladialog
, jak na inną odpowiedź, być może mógłbyś wspomnieć Bash Simple Curses, które jest napisane bash (poleganie natput
).ncurses
jest to podstawa, i odpowiada na bardziej ogólną wersję pytania ... taką jak ta tutaj w tytule :)zenity
.
.
inne graficzne interfejsy użytkownika (GUI)
zatrzymuje dalsze wykonywanie skryptu, psuje go. linia: echo $? , nigdy się nie zdarzy
źródło