명령 행을 통해 GUI 대화 상자를 사용하여 파일 / 디렉토리 경로를 선택하도록 프롬프트하는 방법은 무엇입니까?


16

다음과 같은 스크립트가 있다고 가정하십시오.

(이 예는 rysnc 사용 사례를 보여줍니다)

#!/bin/bash
echo -n "Enter Source Directory:"
read srcdir
echo -n "Enter Destination Directory:"
read dstdir
rsync -av --delete "$srcdir" "$dstdir"

여기서 아이디어는 사용자에게 rsync가 작동하도록 "Source"및 "Destination"디렉토리를 입력하도록 프롬프트하는 것입니다. 사용자는 명령 줄을 통해 수동으로 입력해야합니다 /path/to/directory/ .

대신 GUI 인터페이스를 통해 경로를 입력하라는 메시지가 표시됩니다 .

이 같은: 면밀히


파일 경로를 명령 행으로 리턴 하는 GUI 선택 창 을 사용자에게 프롬프트하기 위해 어떤 명령을 사용할 수 있습니까?


2
Zenity를 사용할 수 있습니다 : help.gnome.org/users/zenity/stable/file-selection.html.en
TuKsn

4
GUI 창의 사용법에 대한 경고를 추가하십시오. 불필요한 창이 팝업되면 고급 사용자에게 분노가 발생할 수 있습니다.
unperson325680

5
왜, 왜 이런 성가신 "기능"을 구현하고 싶습니까? 커맨드 라인에 디렉토리를 입력하면 탭 완성을 사용할 수 있으며 GUI 가로 드 될 때까지 기다릴 필요가 없습니다. 왜 누군가가 완벽하게 좋은 쉘 스크립트에 GUI를 추가하고 싶습니까?
terdon

1
우리는 패러다임을 혼합하고 있기 때문에 사용자가 웹 앱을 통해 경로를 입력하도록하지 않겠습니까?
Tulains Córdova 2016

4
@terdon 우리가 스크립트를 직접 실행하고 터미널에서 실행 하지 않으면 GUI 창을 제공하고 싶습니다.
Pandya

답변:


34

파일에 이것을 사용할 수 있습니다.

zenity --file-selection

폴더의 경우 :

zenity --file-selection --directory

사용하려면 다음을 실행하십시오.

zenity --help-general
zenity --help-file-selection

일반적으로 Zukitwo 3.8의 수정 된 버전으로 내 컴퓨터에서 현재 테마 (GTK 창 관리자의 경우)와 일치합니다.

그것을 사용하는 한 가지 방법은 다음과 같습니다.

echo "you selected $(zenity --file-selection)"

결과는 you selected /path/to/file입니다.

옵션을 사용하여 적절한 제목과 제목을 시작하는 디렉토리를 rsync 유스 케이스와 같이 설정할 수도 있습니다. 예를 들면 다음과 같습니다.

zenity --file-selection --directory --title="Choose rsync source directory" --filename=$HOME/Desktop/

파일의 경우 선택할 파일 형식을 지정할 수도 있습니다. 예 :

zenity --file-selection --file-filter='PDF files (pdf) | *.pdf' --title="Select a PDF file"

참고 : 더 많은 기능을로드하는 Zenity 포크 인 YAD 를 사용할 수도 있습니다 .

sudo add-apt-repository ppa:webupd8team/y-ppa-manager
sudo apt-get update
sudo apt-get install yad

출처

대부분의 경우 파일 브라우저와 동일한 방식으로 사용할 수 있습니다.

yad --file-selection

도움말 페이지 :

yad --help-all

당시 (버전 26?), 새로운 GTK 3.14+ 인터페이스 (zenity가 가지고 있음)와 일치하도록 업데이트되지 않았지만 더 많은 기능이 있지만 호환성을 확인하십시오 (문서를 기반으로 GTK +> 2.16에서 작동해야 함). 0


2
Yad 는 Zenity의 획기적으로 개선 된 포크이며 Zenity 프로젝트가 휴면 된 이후로 대체되었습니다. 나는 것을 볼 수 Zenity 지금 다시 개발 Gnome.org (Gnome3 만?)에있다 그러나 나는 결코 다운로드를 참조하십시오.
DocSalvager

@DocSalvage-그 페이지는 상당히 고대입니다-다음 릴리스 '3.2'라고 말합니다-현재 상당히 오래된 Fedora 19 시스템에서 버전 3.8이 있습니다 (Gnome 3.8 포함)-그놈 셸의 각 버전에 대해 상당히 약간의 그놈이 업데이트됩니다 ( 그래서 아마도 3.10 + 3.12)로 업데이트되었습니다.) 마지막으로 2005-2009 년의 버그 보고서를 다룹니다. - 당신은 우분투의 repos의 최신 안정 버전 (다시 3.8) 얻을 수 packages.ubuntu.com/trusty/zenity을 . 컴파일 된 Yad 버전도 여기 에서 찾을 수 있어야합니다 .
Wilf

Yad는 꽤 좋아 보인다-그것은 zenity보다 더 많은 옵션이 있습니다 :)
Wilf

1
@Wilf 예, yad는 스테로이드에 대한 Zenity입니다. 일단 손에 닿으면 유연하게 움직입니다. 나는 개종자입니다. 아래 OPs 질문에 대한 답변을 btw했습니다.
Scooby-2

@ Scooby-2 cool 답변 추가 설치 지침 (따라서 향후 사용자는 설명을하지 않아도 됨)
Wilf

19

레코드 dialog용으로 만 텍스트 기반 사용자 인터페이스 (TUI) 솔루션에 사용할 수 있습니다 .

통사론:

dialog --title "text" --fselect /path/to/dir height width

예:

FILE=$(dialog --stdout --title "Please choose a file" --fselect $HOME/ 14 48)
echo "${FILE} file chosen."

출력은 다음과 같습니다.

예

@Wilf가 지적했듯이 $LINES$COLUMNS변수를 사용하여 터미널을 채울 수 있습니다.

$(dialog --stdout --title "Please choose a file" --fselect $HOME/ $(expr $LINES - 15) $(expr $COLUMNS - 10))

1
그것은 올바른 대안 솔루션이지만 문제에서 언급 한대로 GUI 창제공하지는 않습니다 !
Pandya

2
알고 있지만 다른 사람이 유용하다고 생각할 수 있습니다. 혼란을 피하기 위해 스크린 샷을 게시했습니다.
kraxor

7
그리고 공정하게 말하면 GUI IMHO 자격이 있습니다.
kraxor

3
GUI와 TUI (텍스트 UI) 사이에 일반적으로 사용되는 줄은 "아톰"의 크기입니다. 픽셀입니까, 아니면 문자입니까?
unperson325680

3
멋진 대답 - 일부 단말기의 폭과 높이가 같은 varibles에 의해 정의 $LINES$COLUMNS- 실행할 수 있도록 $(dialog --stdout --title "Please choose a file" --fselect $HOME/ $(expr $LINES - 15) $(expr $COLUMNS - 10))이 터미널 / 화면 창을 채울 수 있습니다.
Wilf

5

나는 8 개월이 지났으며 OP의 질문에 대한 답변을 받았다는 것을 알고 있습니다. 그러나 yad는 언급되었지만 예제는 제공되지 않았습니다. 다음은 yad를 사용하는 솔루션입니다.

DIR="/home" \
i=0;for location in source destination
do
((i++));selection[$i]=$(yad --center \
--width 350 \
--form \
--title="yad example" \
--text="Select $location directory" \
--field=:LBL "" \
--field=Path:DIR "$DIR" \
--separator='' )
done;\
echo "Command to run is \"rsync -av --delete ${selection[1]} ${selection[2]}\""

작동 방식은 다음과 같습니다. yad를 for 루프에 넣고 변수 $locationsource첫 번째 패스와 destination두 번째 패스 로 설정합니다 . 출력은 selection[]변수 i가 인덱스로 사용되는 배열 에 배치됩니다 . 시작시 0으로 설정되고 각 패스마다 증분됩니다. 따라서 소스는 ${selection[1]}대상으로 저장됩니다 ${selection[2]}.

첫 번째 줄의 DIR = "/ home"은 대화 상자 기본값을 설정합니다. yad 명령 옵션은 터미널에서을 입력하여 찾을 수 있습니다 yad --help.

yad 스크린 샷


2

다음은 답변에 대한 가장 짧고 최상의 솔루션입니다 Yad. 정확한 옵션을 제공합니다 zenity.

yad --file-selection --directory

디렉토리 선택 대화 상자가 열립니다. 추가 인수가 없으면 --directory대신 파일 선택 대화 상자가됩니다.

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