Как заставить пользователей с диалоговым окном графического интерфейса выбрать путь к файлу / каталогу через командную строку?

Можно пойти еще дальше, чем улучшение, предложенное @MikWind, и настроить источники замыкающих устройств во время создания.

Наконец-то я получил скрипт bash для настройки всего, что является постоянным:

#!/bin/bash

MICROPHONE="alsa_input.pci-0000_00_1b.0.analog-stereo"
SPEAKERS="alsa_output.pci-0000_00_1b.0.analog-stereo"

# Create the null sinks
# virtual1 gets your audio source (mplayer ...) only
# virtual2 gets virtual1 + micro
pactl load-module module-null-sink sink_name=virtual1 sink_properties=device.description="virtual1"
pactl load-module module-null-sink sink_name=virtual2 sink_properties=device.description="virtual2"

# Now create the loopback devices, all arguments are optional and can be configured with pavucontrol
pactl load-module module-loopback source=virtual1.monitor sink=$SPEAKERS
pactl load-module module-loopback source=virtual1.monitor sink=virtual2
pactl load-module module-loopback source=$MICROPHONE sink=virtual2

. Я сам боролся за несколько часов до того, как понял достаточно, чтобы заставить его работать. Я собрал результаты своего исследования (сценарий, ссылки на документацию, объяснения) в git repo.

Я не уверен, достаточно ли я для того, чтобы быть полезным кому-то другому, кроме меня, но мне хотелось бы, чтобы я нашел такую ​​документацию, когда я проводил собственное исследование, поэтому я рекомендую всем, кто пытается делайте то же самое, чтобы посмотреть.

1
задан 6 December 2016 в 18:28

3 ответа

Только для записи вы можете использовать dialog для решения текстового пользовательского интерфейса (TUI).

Синтаксис:

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

Пример: [!d2 ]

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))
17
ответ дан 24 May 2018 в 06:17
  • 1
    Хотя это правильное альтернативное решение, но оно не предоставляет окно GUI , как указано в вопросе! – Pandya 26 June 2014 в 14:16
  • 2
    Я знаю, но кто-то может найти это полезным. Я опубликовал скриншот, чтобы избежать путаницы. – kraxor 26 June 2014 в 14:24
  • 3
    И, если быть честным, это квалифицируется как GUI IMHO. – kraxor 26 June 2014 в 14:26
  • 4
    Обычно используемая линия между графическими интерфейсами и TUI (текстовый интерфейс) представляет собой размер «атома»: это пиксель или символ? – progo 26 June 2014 в 14:52
  • 5
    Хороший ответ - ширина и высота некоторых терминалов определяются такими переменными, как $LINES и $COLUMNS - поэтому вы запускаете $(dialog --stdout --title "Please choose a file" --fselect $HOME/ $(expr $LINES - 15) $(expr $COLUMNS - 10)), чтобы заполнить окно терминала / экрана. – Wilf 26 June 2014 в 19:58

Я знаю, что это 8 месяцев, а также ответ на вопрос OP. Однако яд упоминается, но ни один пример не был предложен. Вот мое решение, использующее 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, устанавливая переменную $location на source для первого прохода и destination для второго. Вывод помещается в массив selection[], для которого в качестве индекса используется переменная i. Он устанавливается в 0 в начале и увеличивается с каждым проходом. Следовательно, источник сохраняется как ${selection[1]} и пункт назначения ${selection[2]}.

DIR = "/ home" в первой строке устанавливает диалог по умолчанию. Параметры команды yad можно найти на терминале, набрав yad --help.

3
ответ дан 24 May 2018 в 06:17

Вот кратчайшее (и лучшее) решение для ответа: Yad предоставляет точную опцию, как zenity:

yad --file-selection --directory

Откроется диалоговое окно выбора каталога. Без дополнительного аргумента --directory вместо этого будет диалог выбора файла.

0
ответ дан 24 May 2018 в 06:17

Другие вопросы по тегам:

Похожие вопросы: