터미널 기반 GUI를 만드는 방법은 무엇입니까?

터미널 기반 GUI를 만드는 방법은 무엇입니까?

내 상황에 맞는 터미널 기반 환경을 만들고 싶습니다.불다스크립트는 다음과 같이 작성되었습니다.

데비안 설치

답변1

dialog --backtitle "Package configuration" \
       --title "Configuration sun-java-jre" \
       --yesno "\nBla bla bla...\n\nDo you accept?" 10 30

여기에 이미지 설명을 입력하세요.

사용자 응답은 종료 코드에 저장되므로 평소대로 인쇄할 수 있습니다. ( echo $?이것은 0"예"를 의미하지만 1쉘 세계에서는 "아니요"를 의미합니다).


댓글 섹션에 대한 기타 질문:

  • 일부 명령의 출력을 대화 상자에 넣으려면 명령 대체 메커니즘을 사용하십시오 $(). 예를 들면 다음과 같습니다.

     dialog --backtitle "$(echo abc)" --title "$(cat file)" ...
    
  • 사용자에게 여러 선택권을 제공하려면 --menu대신 옵션을 사용할 수 있습니다.--yesno

  • 사용자가 선택한 출력을 변수에 저장하려면 --stdout옵션을 사용하거나 수동으로 --output-fd출력 설명자를 변경 해야 합니다. 예를 들면 다음과 같습니다.

    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"
    

    dialog기본적으로 stdout이 아닌 stderr로 출력되기 때문에 이 트릭이 필요합니다 .

언제나처럼, man dialog당신의 친구.

답변2

질문의 스크린샷은 Whiptail(다음을 모방하는 단순화된 기능을 갖춘 프로그램)처럼 보입니다.대화, 대신 axolotl을 사용하세요저주). 제목과 버튼이 렌더링되는 방식은 각 프로그램에 내장되어 다르게 보이도록 합니다.

다음은 채찍꼬리 또는 대화 상자에 적합한 원본 스크린샷을 복제하는 스크립트입니다.

#!/bin/sh
: ${DIALOG:=dialog}
case "$DIALOG" in
*dialog*)
        OPTS="$OPTS --cr-wrap"
        high=10
        ;;
*whiptail*)
        high=12
        ;;
esac
rows=$(stty size | cut -d' ' -f1)
[ -z "$rows" ] && rows=$high
[ $rows -gt $high ] && rows=$high
cols=$(stty size | cut -d' ' -f2)
$DIALOG --backtitle "Package configuration" \
       --title "Configuring sun-java6-jre" \
       $OPTS \
       --yesno '\nIn order to install this package, you must accept the license terms, the "Operating System Distributor License for Java" (DLJ), v1.1. Not accepting will cancel the installation.\n\nDo you accept the DLJ license terms?' $rows $((cols - 5))

비교를 위해 Whiptail을 사용한 스크린샷은 다음과 같습니다.

채찍꼬리가 포함된 스크린샷

대화 상자를 사용하면 다음과 같습니다.

대화 상자가 포함된 스크린샷

제목과 버튼의 다른 모양 외에도 대화 상자는 기본적으로 다른 색상을 사용합니다(구성 가능하지만 -스크린샷 보기), 화면에 더 적은 줄이 사용됩니다.

대화상자(및 휩테일)는 라이브러리를 사용하여 선, 색상 등의 표시를 관리합니다. 그러나 Red Hat anaconda 프로그램에서 공유 라이브러리로 사용되는 newt를 볼 수도 있습니다.파이썬(외모는 동일합니다.) 마찬가지로 커널 구성자는 대화 상자의 (잘린) 복사본으로 시작한 다음 lxdialogPython에서 newt가 사용되는 방식과 유사하게 (원래 프로그램 없이) 공유 라이브러리의 기능을 사용하도록 발전했습니다.

Bash에서는 대부분의 일반적인 기능에 대화상자나 휩테일을 사용할 수 있습니다. 누군가가 하나 썼어이에 대한 래퍼(Perl)스크립트가 이러한 모듈이나 다른 모듈을 더 쉽게 사용할 수 있도록 허용하지만 Perl 모듈이 본질적으로 일반적이므로 대화 상자를 직접 사용하는 것이 더 좋습니다.

대화 상자 소스에는 모든 위젯과 대부분의 명령줄 옵션의 예가 포함되어 있습니다.

cdialog (ComeOn Dialog!) version 1.3-20160424
Copyright 2000-2015,2016 Thomas E. Dickey
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

* Display dialog boxes from shell scripts *

Usage: cdialog <options> { --and-widget <options> }
where options are "common" options, followed by "box" options

Special options:
  [--create-rc "file"]
Common options:
  [--ascii-lines] [--aspect <ratio>] [--backtitle <backtitle>] [--beep]
  [--beep-after] [--begin <y> <x>] [--cancel-label <str>] [--clear]
  [--colors] [--column-separator <str>] [--cr-wrap] [--date-format <str>]
  [--default-button <str>] [--default-item <str>] [--defaultno]
  [--exit-label <str>] [--extra-button] [--extra-label <str>]
  [--help-button] [--help-label <str>] [--help-status] [--help-tags]
  [--hfile <str>] [--hline <str>] [--ignore] [--input-fd <fd>]
  [--insecure] [--item-help] [--keep-tite] [--keep-window] [--last-key]
  [--max-input <n>] [--no-cancel] [--no-collapse] [--no-cr-wrap]
  [--no-items] [--no-kill] [--no-label <str>] [--no-lines] [--no-mouse]
  [--no-nl-expand] [--no-ok] [--no-shadow] [--no-tags] [--nook]
  [--ok-label <str>] [--output-fd <fd>] [--output-separator <str>]
  [--print-maxsize] [--print-size] [--print-version] [--quoted]
  [--scrollbar] [--separate-output] [--separate-widget <str>] [--shadow]
  [--single-quoted] [--size-err] [--sleep <secs>] [--stderr] [--stdout]
  [--tab-correct] [--tab-len <n>] [--time-format <str>] [--timeout <secs>]
  [--title <title>] [--trace <file>] [--trim] [--version] [--visit-items]
  [--week-start <str>] [--yes-label <str>]
Box options:
  --buildlist    <text> <height> <width> <list-height> <tag1> <item1> <status1>...
  --calendar     <text> <height> <width> <day> <month> <year>
  --checklist    <text> <height> <width> <list height> <tag1> <item1> <status1>...
  --dselect      <directory> <height> <width>
  --editbox      <file> <height> <width>
  --form         <text> <height> <width> <form height> <label1> <l_y1> <l_x1> <item1> <i_y1> <i_x1> <flen1> <ilen1>...
  --fselect      <filepath> <height> <width>
  --gauge        <text> <height> <width> [<percent>]
  --infobox      <text> <height> <width>
  --inputbox     <text> <height> <width> [<init>]
  --inputmenu    <text> <height> <width> <menu height> <tag1> <item1>...
  --menu         <text> <height> <width> <menu height> <tag1> <item1>...
  --mixedform    <text> <height> <width> <form height> <label1> <l_y1> <l_x1> <item1> <i_y1> <i_x1> <flen1> <ilen1> <itype>...
  --mixedgauge   <text> <height> <width> <percent> <tag1> <item1>...
  --msgbox       <text> <height> <width>
  --passwordbox  <text> <height> <width> [<init>]
  --passwordform <text> <height> <width> <form height> <label1> <l_y1> <l_x1> <item1> <i_y1> <i_x1> <flen1> <ilen1>...
  --pause        <text> <height> <width> <seconds>
  --prgbox       <text> <command> <height> <width>
  --programbox   <text> <height> <width>
  --progressbox  <text> <height> <width>
  --radiolist    <text> <height> <width> <list height> <tag1> <item1> <status1>...
  --rangebox     <text> <height> <width> <min-value> <max-value> <default-value>
  --tailbox      <file> <height> <width>
  --tailboxbg    <file> <height> <width>
  --textbox      <file> <height> <width>
  --timebox      <text> <height> <width> <hour> <minute> <second>
  --treeview     <text> <height> <width> <list-height> <tag1> <item1> <status1> <depth1>...
  --yesno        <text> <height> <width>

Auto-size with height and width = 0. Maximize with height and width = -1.
Global-auto-size if also menu_height/list_height = 0.

추가 자료:

답변3

당신이 찾고 있는 패키지는 다음과 같습니다.저주.

위키피디아ncurses는 다음과 같이 설명됩니다:

ncurses(새로운curses)는 프로그래머가 터미널 독립적인 방식으로 텍스트 기반 사용자 인터페이스를 작성할 수 있도록 하는 API를 제공하는 프로그래밍 라이브러리입니다. 터미널 에뮬레이터에서 실행되는 "GUI와 유사한" 응용 프로그램 소프트웨어를 개발하기 위한 툴킷입니다.

예를 들어 menuconfig 커널 구성 도구에서 널리 사용됩니다. Linux 커널 메뉴 구성 도구의 스크린샷

bash를 사용하고 있으므로 다음을 사용할 수 있습니다.배쉬 간단한 저주(아래 댓글에서 Runium이 언급했듯이)

답변4

zenity --file-selection --directory

.

# var means variable

var\
=$(
zenity --entry                   \
       --title="title"           \
       --text="text"             \
       --entry-text="entry text" \ 
)                                \
&&
echo "$var"

옵션이 있는 zenity 대화 상자 항목

password=$(zenity --password)

zenity--비밀번호

file="$(zenity --file-selection)"

zenity --파일 선택

# ls is a command to list files in a directory

ls $(zenity --file-selection --directory)

# 돕다

zenity --help

zenity --도움말 결과

zenity --help-general 

zenity --help-일반 결과

zenity --help-entry

zenity --help 입력 결과

기타 그래픽 사용자 인터페이스(gui)

dialog

대화

dialog                               \
 --backtitle "backtitle"             \
 --title "title"                     \
 --yesno                             \
 "bla bla bla...\n\n Do you accept?" \
 0 -1                                
echo $?

스크립트의 추가 실행을 중지하고 중단합니다. 명령은 $? 를 에코하지만 결코 발생하지 않습니다.

관련 정보