채찍이나 대화


15

사용자 입력을 사용하는 스크립트를 만들려고 할 때 whiptail을 사용하기로 결정했지만 어느 것이 휴대용이며 우분투 10.x 이상 및 CentOs5.x 이상에서 작동하는지 혼동합니다.

나는 알고 read있지만 도구와 같은 대화 상자를 원하므로 누군가 대안을 알고 있다면 알려주십시오.


whiptail벗겨지지 않았 dialog습니까?
sjas

답변:


12

whiptail대부분의 deb 기반 시스템에는 기본적으로 설치되지만 dialog그렇지는 않습니다.

rpm 기반의 Afair whiptail도 기본 대화 앱입니다.

나는 그것이 당신에게 중요하다고 생각합니다.

그래서 whiptail이동성의 관점에서 올바른 선택입니다.

또한 whiptail을 기반으로 newt하는 반면 dialog을 기반으로 ncurses합니다. 내 관점에서 첫 번째는 더 아름답습니다 (:


추가 정보가 필요합니다 :)
Rahul Patil

2
스크립트는 더 많거나 적은 휴대용 수도 있지만 대화 프로그램 자체는 채찍 꼬리보다 적은 휴대용 없습니다.
Thomas Dickey

8

왜 둘 다 사용하지 않습니까?

(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
너무 복잡한. 왜 이런식이 아닌지 : which whiptail && window=whiptail; which dialog && window=dialog; [ -z window ] && echo "no whiptail or dialog". 그러면 op는`$ window --title foo --msgbox bar 87 5`를 할 수 있습니다.
제임스 M. 레이

6

(이것은 반드시 대답은 아니지만 코드 양으로 인해 게시되었습니다.에 대한 실제 경험이 없습니다 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

(예, 이름이 개행 문자를 포함하는 디렉토리에 설치된 도구에서는 위의 탐지가 실패합니다. 방금 간단하게 유지했습니다.)


5

대화 상자 (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 (및 어쨌든 정확하지 않음)의 속성을 잘못 지정했습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.