답변:
whiptail
대부분의 deb 기반 시스템에는 기본적으로 설치되지만 dialog
그렇지는 않습니다.
rpm 기반의 Afair whiptail
도 기본 대화 앱입니다.
나는 그것이 당신에게 중요하다고 생각합니다.
그래서 whiptail
이동성의 관점에서 올바른 선택입니다.
또한 whiptail
을 기반으로 newt
하는 반면 dialog
을 기반으로 ncurses
합니다. 내 관점에서 첫 번째는 더 아름답습니다 (:
왜 둘 다 사용하지 않습니까?
(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...."
which whiptail && window=whiptail; which dialog && window=dialog; [ -z window ] && echo "no whiptail or dialog"
. 그러면 op는`$ window --title foo --msgbox bar 87 5`를 할 수 있습니다.
(이것은 반드시 대답은 아니지만 코드 양으로 인해 게시되었습니다.에 대한 실제 경험이 없습니다 whiptail
. whiptail
사용자가 테스트 된 솔루션을 게시 하면 나중에 삭제 합니다.)
으로 배쉬 쉘 스크립팅 / 채찍 꼬리는 글을 참고하세요 :
README : whiptail은 dialog (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
(예, 이름이 개행 문자를 포함하는 디렉토리에 설치된 도구에서는 위의 탐지가 실패합니다. 방금 간단하게 유지했습니다.)
대화 상자 (1) 매뉴얼 페이지 의 호환성 섹션에 따르면 :
그러면 휘파람이 있습니다. 실용적인 목적으로 데비안에서 관리합니다 (업스트림 개발자가 거의 수행하지 않습니다). 그것의 문서 (README.whiptail) 주장
채찍 꼬리 (1)에 대한 경량 대체 대화 쉘 스크립트에 대한 대화 상자를 제공하기 위해 (1). ncurses 라이브러리가 아닌 newt 윈도우 라이브러리에 내장되어있어 설치 프로그램, 복구 디스크 등과 같은 임베디드 환경에서 더 작아 질 수 있습니다.
whiptail은 대화 상자와 드롭 인 호환되도록 설계되었지만 기능이 더 적습니다. tailbox, timebox, calendarbox 등과 같은 일부 대화 상자는 구현되지 않습니다.
실제 크기 비교 (Debian testing, 2007/1/10) : whiptail , newt, popt 및 slang 라이브러리 의 총 크기는 757KB입니다. 대화 상자의 개수 (카운트 계산)는 520KB입니다. 첫 번째 단락을 무시하십시오.
* whiptail ** 은 게이지 상자와 같은 일반적인 dialog 옵션에는 작동하지 않기 때문에 두 번째 단락이 잘못 되었습니다. whiptail 은 1990 년대 중반의 dialog 0.4 프로그램보다 대화 와 덜 호환됩니다 .
예를 들어 whiptail 의 맨 페이지는 대화 상자 에서 기능을 차용 하지만 대화 상자 버전을 최대 0.4 (1994)까지 소스로 인용합니다 . 즉, 해당 맨 페이지는 최신 버전의 대화 상자 에서 빌린 기능 , 예를 들어
-게이지 (0.5부터)
--passwordbox (1999 년 데비안 변경)
--default-item ( 대화 상자 2000/02/22에서),
--output-fd ( 2002/08/14 대화 상자 에서 ).
다소 유머 스럽게도 , 이스케이프로 "-"를 사용하는 popt 기능 (맨 페이지에 문서화되어 있지 않음 )이 whiptail 맨 페이지 에 언급되기 1 년 전 대화 의 맨 페이지에 문서화되어 있음 을 알 수 있습니다. whiptail 의 맨 페이지 는 getopt (및 어쨌든 정확하지 않음)의 속성을 잘못 지정했습니다 .
whiptail
벗겨지지 않았dialog
습니까?