ชักหรือโต้ตอบ


15

ฉันจะสร้างสคริปต์ที่จะใช้อินพุตของผู้ใช้ดังนั้นฉันตัดสินใจที่จะใช้แส้ แต่ก็สับสนนิดหน่อยว่าอันไหนที่พกพาได้และจะทำงานใน ubuntu 10.x และสูงกว่าและ CentOs5.x ขึ้นไป

ฉันรู้readแต่ฉันต้องการไดอะล็อกเหมือนเครื่องมือดังนั้นถ้าใครรู้ทางเลือกอื่นก็แค่บอกให้ฉันรู้


ไม่ได้whiptailถูกฉุดออกdialog?
sjas

คำตอบ:


12

whiptailมีการติดตั้งโดยค่าเริ่มต้นในระบบที่ใช้เดบิตส่วนใหญ่ในขณะที่dialogไม่ได้

ระยะไกลบนพื้นฐานของ rpm whiptailเป็นแอพกล่องโต้ตอบเริ่มต้น

ฉันคิดว่ามันสำคัญสำหรับคุณ

ดังนั้นwhiptailทางเลือกที่ถูกต้องคือจากจุดพกพา

นอกจากนี้ยังwhiptailขึ้นอยู่กับnewtในขณะที่อยู่บนพื้นฐานของdialog ncursesจากมุมมองของฉันคนแรกสวยกว่า (:


ดีใจที่ได้ทราบข้อมูลเพิ่มเติม :)
Rahul Patil

2
สคริปต์อาจจะมากหรือน้อยแบบพกพา แต่โปรแกรมโต้ตอบของตัวเองไม่น้อยกว่าแบบพกพา whiptail
Thomas Dickey

8

ทำไมไม่ใช้ทั้งสองอย่าง:

(ต้องการทุบตี 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
ซับซ้อนมาก which whiptail && window=whiptail; which dialog && window=dialog; [ -z window ] && echo "no whiptail or dialog"ทำไมไม่อะไรเช่นนี้ จากนั้น op สามารถทำ `$ window - ชื่อ foo --msgbox bar 87 5 '
James M. Lay

6

(นี่ไม่ใช่คำตอบที่จำเป็น แต่ฉันโพสต์เช่นนี้เนื่องจากจำนวนของรหัสฉันไม่มีประสบการณ์ในทางปฏิบัติด้วยwhiptailจะลบสิ่งนี้ในภายหลังหากwhiptailผู้ใช้โพสต์โซลูชันที่ทดสอบแล้วในเรื่องนี้)

ตามที่Bash Shell Scripting / Whiptailเขียนไว้:

จาก README: whiptail ได้รับการออกแบบให้ใช้งานร่วมกับกล่องโต้ตอบ (1) ได้ แต่มีคุณสมบัติน้อยกว่า: กล่องโต้ตอบบางกล่องไม่ได้ใช้งานเช่น tailbox, timebox, calendarbox เป็นต้น

นั่นหมายความว่าคุณไม่จำเป็นต้องตัดสินใจอย่างใดอย่างหนึ่ง เพียงตรวจสอบว่ามีรายการใดให้ใช้สคริปต์:

# 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

(ใช่การตรวจจับด้านบนจะล้มเหลวในเครื่องมือที่ติดตั้งภายในไดเรกทอรีที่มีชื่อที่มีอักขระขึ้นบรรทัดใหม่ฉันเพิ่งทำให้มันง่าย)


5

ตามความเข้ากันได้ส่วนของหน้าโต้ตอบ (1) คู่มือ :

จากนั้นก็มีwhiptail เพื่อวัตถุประสงค์ในทางปฏิบัติมันได้รับการปรับปรุงโดย Debian (งานน้อยมากที่ทำโดยนักพัฒนาต้นน้ำ) เอกสารของมัน (README.whiptail) อ้างสิทธิ์

whiptail (1) เป็นการแทนที่เบาสำหรับไดอะล็อก (1) เพื่อจัดเตรียมกล่องโต้ตอบสำหรับเชลล์สคริปต์ มันถูกสร้างขึ้นบน new window windowing library แทนที่จะเป็น ncurses library ทำให้มันมีขนาดเล็กลงในสภาพแวดล้อมแบบฝังตัวเช่นตัวติดตั้งดิสก์กู้ข้อมูล ฯลฯ

Whiptail ได้รับการออกแบบให้ใช้งานร่วมกับกล่องโต้ตอบได้ แต่มีคุณสมบัติน้อยกว่า: กล่องโต้ตอบบางกล่องไม่ได้ถูกใช้งานเช่น tailbox, timebox, calendarbox เป็นต้น

การเปรียบเทียบขนาดที่แท้จริง (การทดสอบ Debian, 2007/1/10): ขนาดทั้งหมดของwhiptail , ไลบรารี newt, popt และ slang คือ 757 KB จำนวนที่เปรียบเทียบได้สำหรับ ไดอะล็อก (จำนวน ncurses) คือ 520 KB ไม่สนใจย่อหน้าแรก

ย่อหน้าที่สองทำให้เข้าใจผิดเนื่องจาก * whiptail ** ไม่ทำงานสำหรับตัวเลือกทั่วไปของกล่องโต้ตอบเช่นกล่องมาตรวัด whiptail เข้ากันได้กับ กล่องโต้ตอบ น้อยกว่าโปรแกรมdialog dialogกลางปี ​​1990 ในช่วงกลางทศวรรษ 1990

manpage ของwhiptailยืมคุณสมบัติจาก ไดอะล็อกเช่น แต่อ้างอิงเฉพาะเวอร์ชันของไดอะล็อกที่มีความแปลกประหลาดมากถึง 0.4 (1994) ในฐานะที่มา นั่นคือ manpage ของมันหมายถึงคุณสมบัติที่ยืมมาจากกล่องโต้ตอบเวอร์ชันล่าสุดเช่น

  • - วัด (จาก 0.5)

  • --passwordbox (จากการเปลี่ยนแปลงเดเบียนในปี 1999)

  • --default-item (จากไดอะล็อก 2000/02/22)

  • --output-fd (จากกล่องโต้ตอบ 2002/08/14)

ค่อนข้างตลกหนึ่งอาจทราบว่าpoptคุณลักษณะ (ไม่มีเอกสารใน manpage ของมัน) ของการใช้ - เป็นหนีได้รับการบันทึกไว้ใน "" โต้ตอบ 's manpage เกี่ยวกับปีก่อนที่จะถูกกล่าวถึงในwhiptail ' s manpage manpage ของwhiptailมีการระบุว่าgetoptไม่ถูกต้องและไม่ถูกต้องอยู่ดี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.