사용자 입력을 사용하는 스크립트를 만들 예정이므로 whiptail
.
하지만 이제는 어느 것이 이식 가능하고 Ubuntu 10.x 이상과 CentOS 5.x 이상에서 실행될 수 있는지 약간 혼란스럽습니다.
알아요 read
. 하지만 dialog
다른 대안을 아는 사람이 있으면 알려주시기 바랍니다.
답변1
whiptail
대부분의 deb 기반 시스템에는 기본적으로 설치되지만 그렇지 dialog
않습니다.
공평하게 말하면 rpm은 whiptail
기본 대화 상자 응용 프로그램이기도 합니다.
나는 이것이 당신에게 중요하다고 생각합니다.
이식성 측면에서도 whiptail
올바른 선택 입니다.
whiptail
에 기반을 두고 있는 동시에 newt
에 dialog
기반을 두고 있다 ncurses
. 내 관점에서는 첫 번째 것이 더 아름답습니다(:
답변2
~에 따르면매뉴얼 페이지의 Dialog(1) 호환성 섹션:
그럼 거기 있어요채찍 꼬리. 실용적인 목적을 위해 데비안에서 유지 관리합니다(업스트림 개발자가 최소한의 작업을 수행함). 해당 문서(README.whiptail) 주장
채찍 꼬리(1) 가벼운 대안입니다대화(1) 쉘 스크립트에 대한 대화 상자를 제공합니다. ncurses 라이브러리가 아닌 newt window 라이브러리를 기반으로 구축되었기 때문에 설치 프로그램, 복구 디스크 등 임베디드 환경에서는 크기가 더 작습니다.
Whittail은 대화 상자와 직접 호환되도록 설계되었지만 기능이 적습니다. tailbox, timebox, Calendarbox 등과 같은 일부 대화 상자는 구현되지 않습니다.
실제 크기 비교(Debian 테스트, 2007/1/10): 전체 크기채찍 꼬리, newt, popt 및 slang 라이브러리는 757KB입니다. 비교 가능한 수치는 대화 (ncurses 계산)은 520KB입니다. 첫 번째 단락을 무시하십시오.
*whiptail**은 다음과 같은 일반적인 옵션에서도 작동하지 않기 때문에 두 번째 단락은 오해의 소지가 있습니다.대화, 악기 상자와 같은. 채찍 꼬리 별로 호환되지 않음 대화 1990년대 중반의 원래 Dialog 0.4 프로그램보다 낫습니다.
채찍 꼬리맨페이지는 다음 기능을 차용합니다. 대화예를 들어, 이상하게도 참조만 있습니다.대화0.4(1994) 이전 버전이 소스로 사용됩니다. 즉, 해당 맨페이지는 다음 버전의 최신 버전을 참조합니다.대화,예를 들어,
- 측정(0.5부터)
--비밀번호 상자(Debian 1999의 변경 사항),
--기본 프로젝트(에서대화2000년 2월 22일),
--출력-fd(에서대화2002/08/14).
다소 유머러스하게도 눈치채실 수도 있겠지만팝트맨페이지에 문서화되지 않은 이스케이프 문자로 "--"를 사용하는 기능은 다음 문서에 문서화되어 있습니다.대화맨페이지는 약 1년 전에 언급되었습니다.채찍 꼬리맨페이지. 채찍 꼬리매뉴얼 페이지에서는 이를 다음과 같이 잘못 설명합니다.선택 항목 가져오기(어떤 면에서는 정확하지 않습니다.)
답변3
(반드시 답변은 아니지만 코드 양이 많아서 이렇게 올립니다. 실제 경험이 없습니다. 사용자가 여기에 테스트된 솔루션을 게시하면 whiptail
나중에 제거됩니다.)whiptail
~처럼Bash 쉘 스크립트/Whiptail썼다:
Readme 파일에서 판단하면,hiptail은 대화 상자(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
(예, 이름에 개행 문자가 포함된 디렉토리에 설치된 도구에 대해서는 위의 감지가 실패합니다. 간단하게 설명하겠습니다.)
답변4
둘 다 사용하지 않는 이유:
(배쉬 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...."