আমি কীভাবে টার্মিনাল ভিত্তিক জিইউআই তৈরি করব?


50

আমি আমার বাশ স্ক্রিপ্টটিকে রূপান্তর করতে একটি টার্মিনাল ভিত্তিক পরিবেশ তৈরির সন্ধান করছি । আমি এটি দেখতে এটি দেখতে চাই:

ডেবিয়ান ইনস্টল


4
দেখব dialog, যা কি এটি ব্যবহার বলে মনে হচ্ছে।
ডোপঘোতি


আমি মনে করি একটি টার্মিনাল ভিত্তিক জিইউআই একটি টিইউআই (যা সি এল এলির চেয়ে আলাদা)।
সার্বজনীনউইনকআইডি

"টুই" একটি আরএইচ শব্দ আইআইআরসি। whiptail> dialogএছাড়াও
ব্র্যাচলে

@ ব্র্যাচলে: জিডিবি tuiতার বিভক্ত উইন্ডো মোডের জন্যও ব্যবহার করে ( layout regউদাহরণস্বরূপ রেজিস্ট্রার, উত্স এবং কমান্ড tui reg vecপ্রদর্শন করে , এবং রেগ উইন্ডোতে ভেক্টর রেজিস্টারগুলি দেখানোর জন্য (একটি নমনীয় উপায়ে, যাতে অংশটি সত্যিই কার্যকর না হয়: /) । IDK যদি রেডহাট সেই প্যাচটি লিখেছিল যা সেই বৈশিষ্ট্যটি যুক্ত করেছে, বা এটি কত পুরানো।
পিটার কর্ডেস

উত্তর:


42
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স্টাডআউট নয় ডিফল্ট আউটপুটগুলি স্ট্ডারকে।

এবং সর্বদা হিসাবে, man dialogআপনার বন্ধু।


সুন্দর "ব্লে ব্লে ব্লে ..." তবে আপনি কীভাবে আউটপুটটি ক্যাপচার করবেন?
টেম্পোরফুল আমাকে দ্য উডস ইন

1
@tempforFindMeInWoods যদি আউটপুট দ্বারা আপনি প্রস্থান কোডটি বোঝায় তবে কেবল ইউসুয়াল হিসাবে: এটি ?ভেরিয়েবলের অভ্যন্তরে সঞ্চিত রয়েছে , চেষ্টা করুন echo $?
জিম্মিজ

1
@tempforFindMeInTheWoods আপনি যদি parted -lডায়ালগ বক্সের মাধ্যমে কমান্ডের আউটপুট ব্যবহারকারীর কাছে উপস্থাপন করতে চান তবে সম্ভবত বিকল্পটি --menuতার পরিবর্তে আরও ভাল পছন্দ -yesno। এই ক্ষেত্রে আউটপুটটি ভেরিয়েবলের মধ্যে সঞ্চয় করতে আপনাকে বর্ণনাকারীদের সাথে কিছুটা খেলতে হবে, উদাহরণস্বরূপ: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
জিম্মিজ ২

3
অথবা, আপনি --stdoutবিকল্পটি ব্যবহার করতে পারেন ।
টমাস ডিকি

2
সমস্ত কথোপকথনের বিকল্প ম্যানুয়ালটিতে ব্যাখ্যা করা হয়েছে:man dialog
ফেরিবিগ

34

প্রশ্নের স্ক্রিনশটটি হুইপটেলের মতো দেখাচ্ছে (একটি ক্রিয়াকলাপ হ্রাস হওয়া প্রোগ্রামের অনুকরণ ডায়ালগ , এনকার্সের চেয়ে নিউট ব্যবহার করে )। শিরোনাম এবং বোতামগুলি যেভাবে রেন্ডার করা হয় তা প্রতিটি প্রোগ্রামের মধ্যে অন্তর্নির্মিত হয়, যার ফলে তাদের আলাদা দেখা যায়।

হুইপটেল বা কথোপকথনের জন্য এখানে একটি স্ক্রিপ্ট আসল স্ক্রিনশটটি নকল করে:

#!/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))

এবং তুলনায়, হুইপটেল সহ স্ক্রিনশট:

হুইপটেল সহ স্ক্রিনশট

এবং সংলাপ সহ:

ডায়ালগ সহ স্ক্রিনশট

শিরোনাম এবং বোতামগুলির ভিন্ন উপস্থিতি ছাড়াও, ডায়ালগটি ডিফল্টরূপে বিভিন্ন বর্ণ ব্যবহার করে (যদিও এটি কনফিগারযোগ্য - স্ক্রিনশটগুলি দেখুন ), এবং এটি স্ক্রিনে কম লাইন ব্যবহার করে।

ডায়ালগ (এবং হুইপটেল) লাইনের লাইব্রেরিগুলি লাইন, রঙ ইত্যাদির জন্য পরিচালনা করতে ব্যবহার করতে পারে তবে আপনি রেড হ্যাট অ্যানাকোন্ডা প্রোগ্রামে পাইথন (একই চেহারা সহ) থেকে আহৃত একটি শেয়ার্ড লাইব্রেরি হিসাবে নতুন ব্যবহার করতে পারেন । একই লাইনের সাথে, কার্নেল কনফিগারেশন প্রোগ্রামটি ডায়লগের একটি (কাট ডাউন) অনুলিপি হিসাবে শুরু হয়েছিল এবং তারপরে একটি lxdialogঅজগর থেকে নিউট যেভাবে ব্যবহৃত হয় তার মতো একটি ভাগ করা লাইব্রেরি (মূল প্রোগ্রাম ব্যতীত) ব্যবহার করে বৈশিষ্ট্যগুলিতে বিবর্তিত হয়েছিল ।

বাশ থেকে - আপনি সর্বাধিক ব্যবহৃত বৈশিষ্ট্যগুলির জন্য ডায়ালগ বা হুইপটেল ব্যবহার করতে পারেন। কেউ স্ক্রিপ্টগুলি আরও সহজেই সেগুলি বা অন্য কয়েকটিকে ব্যবহার করার অনুমতি দেওয়ার জন্য তাদের জন্য একটি মোড়ক লিখেছিলেন তবে পার্ল মডিউলটি মূলত সাধারণ-ডিনোমিনেটর হওয়ায় আপনি সরাসরি ডায়ালগটি ব্যবহার করা ভাল।

কথোপকথনের উত্সগুলিতে বেশিরভাগ কমান্ড-লাইন বিকল্পের সাথে সমস্ত উইজেটের উদাহরণ অন্তর্ভুক্ত থাকে:

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.

আরও পড়া:


11

আমি বিশ্বাস করি আপনি যে প্যাকেজটির সন্ধান করছেন সেটি হ'ল এনক্রস

উইকিপিডিয়া ncurses নিম্নলিখিত বর্ণনা:

ncurses (নতুন অভিশাপ) এমন একটি প্রোগ্রামিং লাইব্রেরি যা একটি API সরবরাহ করে যা প্রোগ্রামারকে টার্মিনাল-স্বতন্ত্র পদ্ধতিতে পাঠ্য-ভিত্তিক ব্যবহারকারী ইন্টারফেসগুলি লেখার অনুমতি দেয়। এটি "GUI- জাতীয়" অ্যাপ্লিকেশন সফ্টওয়্যার তৈরির জন্য একটি সরঞ্জামকিট যা একটি টার্মিনাল এমুলেটরের অধীনে চলে

এটি ব্যাপকভাবে ব্যবহৃত হয়, উদাহরণস্বরূপ, মেনুকনফিগ কার্নেল কনফিগারেশন সরঞ্জামে: লিনাক্স কার্নেল মেনুকনফিগ সরঞ্জামটির স্ক্রিন শট

যেহেতু আপনি বাশ ব্যবহার করছেন, আপনি ব্যাশ সিম্পল ক্রসগুলি (নীচের মন্তব্যে রুনিয়াম দ্বারা উল্লিখিত) ব্যবহার করতে পারেন ।


11
ncursesএকটি সি লাইব্রেরি হয়। (আমি যদি সঠিকভাবে বুঝতে পারি) ওপি একটি স্ক্রিপ্টিং পরিবেশ চায় (বাশের জন্য)। menuconfigসি তে লেখা আছে dialog, অন্য উত্তর অনুসারে, আপনি সম্ভবত বাশ সিম্পল ক্রপগুলি উল্লেখ করতে পারেন যা বাশে (নির্ভর করে tput) লেখা আছে ।
রুনিয়াম

@ রুনিয়াম: স্পষ্টতা এবং বাশ সাধারণ শাপের লিঙ্কটির জন্য ধন্যবাদ।

2
তবুও, এটি ncursesএর ভিত্তি হিসাবে উল্লেখ করা দরকারী ছিল এবং এটি প্রশ্নের আরও সাধারণ সংস্করণের উত্তর দেয় ... এখানে শিরোনামের মতো :)
আন্ডারস্কোর_

-1

zenity

zenity --file-selection --directory

# var means variable

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

# ls is a command to list files in a directory

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

বিকল্পগুলির সাথে জেনটি ডায়ালগ এন্ট্রি

password=$(zenity --password)

উত্সাহ - পাসওয়ার্ড

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

Zenity - ফাইল নির্বাচন

zenity --help

zenity - সহায়তা ফলাফল

zenity --help-general 

জেনिटी - হেল্প-সাধারণ ফলাফল

zenity --help-entry

জেনটি - হেল্প-এন্ট্রি ফলাফল

অন্যান্য গ্রাফিকাল ইউজার ইন্টারফেস (জিওআই)

dialog

কথোপকথন

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

স্ক্রিপ্টটির আরও সম্পাদন বন্ধ করে দেয় এটি ভেঙে দেয়। লাইন: প্রতিধ্বনি $? , কখনও হবে না

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.