私は Bash スクリプトを適応させるターミナルベースの環境を作成したいと考えています。私はそれをこのように見せたいです:
質問のスクリーンショットはホイップテール(- ncurses ではなくnewtを使用して dialog を模倣した機能削減プログラム)のように見えます。タイトルとボタンのレンダリング方法は各プログラムに組み込まれているため、見た目が異なります。
以下は、ホイップテールまたはダイアログの元のスクリーンショットを複製するスクリプトです。
#!/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のスクリーンショット:
そしてダイアログ付き:
タイトルとボタンの異なる外観に加えて、ダイアログはデフォルトで異なる色を使用します(ただし、これは構成可能です--- スクリーンショットを参照 )、画面上の行が少なくなります。
ダイアログ(およびwhiptail)は、線、色などの表示を管理するためにライブラリを使用します。ただし、Red Hat anacondaプログラムで使用されるnewtがpython(同じ外観)。同じように、カーネル構成プログラムはダイアログの(カットダウン)コピーとして開始され、その後、newtが使用されるのと同じように、共有ライブラリ(元のlxdialog
プログラムなし)を使用して機能に進化しましたpython。
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.
参考文献:
あなたが探しているパッケージは ncurses だと思います。
Wikipedia は、ncursesを次のように説明します。
ncurses(新しいcurses)は、プログラマーがテキストベースのユーザーインターフェイスを端末に依存しない方法で記述できるようにするAPIを提供するプログラミングライブラリです。端末エミュレーターの下で実行される「GUIのような」アプリケーションソフトウェアを開発するためのツールキットです。
これは、たとえばmenuconfigカーネル構成ツールで広く使用されています。
Bashを使用しているため、 Bash Simple Curses を使用できます(以下のコメントでRuniumが言及しています)。
zenity
zenity --file-selection --directory
。
# var means variable
var\
=$(
zenity --entry \
--title="title" \
--text="text" \
--entry-text="entry text" \
) \
&&
echo "$var"
password=$(zenity --password)
file="$(zenity --file-selection)"
# ls is a command to list files in a directory
ls $(zenity --file-selection --directory)
# 助けて
zenity --help
zenity --help-general
zenity --help-entry
他のグラフィカルユーザーインターフェイス(gui)
dialog
dialog \
--backtitle "backtitle" \
--title "title" \
--yesno \
"bla bla bla...\n\n Do you accept?" \
0 -1
echo $?
スクリプトのそれ以上の実行を停止し、中断します。コマンドは$をエコーしますか? 、決して起こらない