Предположим, у меня есть такой сценарий:
(в примере показан сценарий использования rysnc)
#!/bin/bash
echo -n "Enter Source Directory:"
read srcdir
echo -n "Enter Destination Directory:"
read dstdir
rsync -av --delete "$srcdir" "$dstdir"
Идея в том, чтобы предложить пользователю ввести «Источник» и Каталоги "Destination" для работы с rsync. Таким образом, пользователь должен будет вручную ввести /path/to/directory/
через командную строку.
Вместо я хочу предложить пользователю ввести пути через интерфейс GUI .
Примерно так:
Какие команды можно использовать, чтобы запросить у пользователя окно выбора GUI , которое возвращает путь к файлу в командной строке?
Можно использовать это для файлов:
zenity --file-selection
и это для папок:
zenity --file-selection --directory
для использования, выполненного:
zenity --help-general
zenity --help-file-selection
Обычно это соответствует текущей теме (для менеджеров окон GTK так или иначе) на моей машине с кивнувшей версией Zukitwo 3.8, это похоже на это:
Один способ использовать его похож на это:
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"
ПРИМЕЧАНИЕ: можно также использовать YAD, ветвление Zenity, который имеет загрузки больше функций.
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
Только для справки можно использовать 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))
Я знаю, что этому 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 для цикла, устанавливая переменную $location
кому: source
для первичной обработки и destination
для второго. Вывод помещается в массив selection[]
для которого переменная i
используется в качестве индекса. Это установлено на 0 в запуске и увеличено с каждой передачей. Следовательно источник сохраняется как ${selection[1]}
и место назначения ${selection[2]}
.
DIR = "/home" на первой строке устанавливает диалоговое значение по умолчанию. Опции команды yad могут быть найдены от терминала путем ввода yad --help
.
Здесь является самым коротким (и лучше всего) решение ответа: Yad
предоставляет точную возможность точно так же, как zenity
делает:
yad --file-selection --directory
Это открывает диалоговое окно выбора каталога. Без дополнительного аргумента --directory
это будет диалоговое окно выбора файла вместо этого.