대화상자 메뉴는 파일을 표시하고 그 중 하나를 선택합니다.

대화상자 메뉴는 파일을 표시하고 그 중 하나를 선택합니다.

메뉴의 디렉토리 아래에 있는 모든 파일을 표시 /home하고 그 중 하나만 선택하고 싶습니다. 그러면 스크립트는 선택한 파일의 전체 경로를 인쇄합니다.

다음 스크립트를 만들었습니다. 이 스크립트는 대화 상자 메뉴에만 파일을 표시합니다.

#!/bin/bash
dialog --title "List file of directory /home" --msgbox "$(ls /home )" 100 100

답변1

대화Xdialog와 같은 파일 선택 및 디렉터리 선택 위젯이 있습니다.

--fselect를 사용한 대화 상자 그림

이를 사용하려면 OP의 스크립트가 다음과 같을 수 있습니다.

#!/bin/bash
dialog --title "List file of directory" --fselect /home 100 100

100x100 창은 상당히 커 보이지만. 이것매뉴얼 페이지더 나은 대안 제공:

대부분의 위젯은 여러 줄로 구성된 메시지 프롬프트 값에 맞게 위젯의 크기를 자동으로 조정하는 데 사용할 수 있는 높이 및 너비 매개변수를 허용합니다.

  • 매개변수가 음수이면 대화 상자는 화면 크기를 사용합니다.
  • 인수가 0이면 대화 상자는 위젯의 최소 크기를 사용하여 프롬프트와 데이터를 표시합니다.
  • 그렇지 않으면 대화상자는 위젯의 지정된 크기를 사용합니다.

실행할 수 있는 스크립트만 제한하려는 경우 whiptail--radiolist옵션이 가장 좋습니다 --menu.

답변2

메시지 상자 대신 메뉴를 사용해야 합니다. 다음 스크립트를 사용해 보세요.

#!/bin/bash
let i=0 # define counting variable
W=() # define working array
while read -r line; do # process file by file
    let i=$i+1
    W+=($i "$line")
done < <( ls -1 /home )
FILE=$(dialog --title "List file of directory /home" --menu "Chose one" 24 80 17 "${W[@]}" 3>&2 2>&1 1>&3) # show dialog and store output
RESULT=$?
clear
if [ $RESULT -eq 0 ]; then # Exit with OK
     echo "${W[$((FILE * 2 -1))]}"
fi

여기에는 배열이 필요합니다. 그렇지 않으면 명령으로 올바르게 구문 분석되지 않습니다.http://mywiki.wooledge.org/BashFAQ/050.

스크립트는 예제와 동일하게 /home 폴더의 모든 것을 나열합니다. 정말로 파일을 원한다면 교체하십시오.

ls -1 /home 

그리고

find /home -maxdepth 1 -type f

또한 대부분의 배포판에서 기본 옵션인 "whiptail" 사용을 고려해보세요. 대화 상자는 대부분 설치되지 않았습니다.

관련 정보