whiptail hoặc hộp thoại


15

Tôi sẽ tạo tập lệnh sẽ sử dụng đầu vào của người dùng, vì vậy tôi đã quyết định sử dụng whiptail, nhưng một chút nhầm lẫn rằng cái nào là di động và sẽ hoạt động trong ubfox 10.x trở lên và CentOs5.x trở lên.

Tôi biết read, nhưng tôi muốn hộp thoại như công cụ, vì vậy nếu có ai biết bất kỳ thay thế nào, hãy cho tôi biết.


không phải whiptaillà một rip-off dialog?
sjas

Câu trả lời:


12

whiptailđược cài đặt theo mặc định trên hầu hết các hệ thống dựa trên deb, trong khi dialogthì không.

Afair, trên vòng / phút whiptailcũng là ứng dụng hộp thoại mặc định.

Tôi đoán nó quan trọng với bạn.

Vì vậy, whiptaillà sự lựa chọn đúng đắn từ điểm di động.

Cũng whiptaildựa trên newt, trong khi dialogdựa trên ncurses. Theo quan điểm của tôi, cái đầu tiên đẹp hơn (:


thật tốt khi biết thêm thông tin :)
Rahul Patil

2
Các kịch bản có thể lớn hoặc ít di động, nhưng chương trình thoại chính nó là không ít di động hơn whiptail.
Thomas Dickey

8

Tại sao không sử dụng cả hai:

(Yêu cầu bash 4)

#!/usr/bin/env bash
t(){ type "$1"&>/dev/null;}
function Menu.Show {
   local DIA DIA_ESC; while :; do
      t whiptail && DIA=whiptail && break
      t dialog && DIA=dialog && DIA_ESC=-- && break
      exec date +s"No dialog program found"
   done; declare -A o="$1"; shift
   $DIA --backtitle "${o[backtitle]}" --title "${o[title]}" \
      --menu "${o[question]}" 0 0 0 $DIA_ESC "$@"; }



Menu.Show '([backtitle]="Backtitle"
            [title]="Title"
            [question]="Please choose:")'          \
                                                   \
            "Option A"  "Stuff...."                \
            "Option B"  "Stuff...."                \
            "Option C"  "Stuff...."    

1
Quá phức tạp. Tại sao không phải là một cái gì đó như thế này : which whiptail && window=whiptail; which dialog && window=dialog; [ -z window ] && echo "no whiptail or dialog". Sau đó, op chỉ có thể làm `$ window --title foo --msgbox bar 87 5`.
James M. Lay

6

(Đây không nhất thiết là một câu trả lời, nhưng tôi đã đăng như vậy do số lượng mã. Tôi không có kinh nghiệm thực tế với whiptail. Sẽ xóa điều này sau nếu whiptailngười dùng đăng một giải pháp đã được thử nghiệm về điều này.)

Như Bash Shell Scripting / Whiptail viết:

Từ README của nó: whiptail được thiết kế để tương thích với hộp thoại (1), nhưng có ít tính năng hơn: một số hộp thoại không được triển khai, chẳng hạn như tailbox, timebox, calendarbox, v.v.

Điều đó có nghĩa là bạn không nhất thiết phải quyết định cái này hay cái khác. Chỉ cần phát hiện cái nào có sẵn sau đó cho phép tập lệnh sử dụng nó:

# check whether whiptail or dialog is installed
# (choosing the first command found)
read dialog <<< "$(which whiptail dialog 2> /dev/null)"

# exit if none found
[[ "$dialog" ]] || {
  echo 'neither whiptail nor dialog found' >&2
  exit 1
}

# just use whichever was found
"$dialog" --msgbox "Message displayed with $dialog" 0 0

(Có, việc phát hiện ở trên sẽ thất bại đối với các công cụ được cài đặt bên trong các thư mục có tên chứa các ký tự dòng mới. Tôi chỉ giữ nó đơn giản.)


5

Theo phần TƯƠNG THÍCH của trang hướng dẫn (1) hộp thoại :

Sau đó là quất . Đối với các mục đích thực tế, nó được duy trì bởi Debian (rất ít công việc được thực hiện bởi các nhà phát triển ngược dòng của nó). Tài liệu của nó (README.whiptail) yêu cầu bồi thường

whiptail (1) là một thay thế nhẹ cho hộp thoại (1), để cung cấp các hộp thoại cho các kịch bản shell. Nó được xây dựng trên thư viện cửa sổ newt chứ không phải thư viện ncurses, cho phép nó nhỏ hơn trong các môi trường nhúng như trình cài đặt, đĩa cứu hộ, v.v.

whiptail được thiết kế để tương thích với hộp thoại, nhưng có ít tính năng hơn: một số hộp thoại không được triển khai, chẳng hạn như tailbox, timebox, calendarbox, v.v.

So sánh kích thước thực tế (thử nghiệm Debian, 2007/1/10): Tổng kích thước cho các thư viện whiptail , newt, popt và tiếng lóng là 757 KB. Số có thể so sánh cho hộp thoại (đếm số lần nhập) là 520 KB. Bỏ qua đoạn đầu tiên.

Đoạn thứ hai là sai lệch, vì * whiptail ** cũng không hoạt động đối với các tùy chọn chung của hộp thoại , chẳng hạn như hộp đo. whiptail không tương thích với hộp thoại so với chương trình 0,4 của hộp thoại giữa những năm 1990.

manpage của whiptail mượn các tính năng từ hộp thoại , ví dụ, nhưng chỉ trích dẫn một cách kỳ lạ các phiên bản hộp thoại lên đến 0,4 (1994) làm nguồn. Đó là, trang của nó đề cập đến các tính năng được mượn từ các phiên bản mới hơn của hộp thoại , ví dụ:

  • --gauge (từ 0,5)

  • --passwordbox (từ thay đổi Debian năm 1999),

  • --default-item (từ hộp thoại 2000/02/22),

  • --output-fd (từ hộp thoại 2002/08/14).

Một cách hài hước, người ta có thể lưu ý rằng tính năng popt (không có tài liệu trong trang chủ của nó) về việc sử dụng "-" như một lối thoát đã được ghi lại trong trang của hộp thoại khoảng một năm trước khi nó được đề cập trong trang cá nhân của whiptail . manpage của whiptail thuộc tính không chính xác mà getopt (và dù sao cũng không chính xác).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.