У меня есть чрезвычайно простой сценарий, который в настоящее время выполняет команду на файле, расположенном в той же папке: command ./file_in_folder option output
. Было бы лучше, если сценарий спрашивает пользователя, какой файл они хотят.
Простой сценарий может попросить, чтобы файловый менеджер GUI ОС по умолчанию открыл и пасовал назад выбранный файл к сценарию?
Поддельный код:
<FILE>
command <FILE> option output
Если не, что рекомендуемый путь должен передать <FILE>
написать сценарий, который выполнится command <FILE> option output
?
Zenity может использоваться для создания средства выбора файла GUI, с помощью --file-selection
опция. Для единственного файла это достаточно:
#! /bin/bash
file="$(zenity --title "Pick a file" --file-selection)"
do something with "$file"
то, Где это становится хитрым, обрабатывает несколько файлов. Существует только два символа, не позволенные в именах файлов: ПУСТОЙ УКАЗАТЕЛЬ ASCII и /
. /
, конечно, появляется в путях. Поэтому единственный символ, который можно безопасно выбрать для разделения двух имен файлов, NUL
. Вы не можете использовать NUL, так как символ должен быть передан как параметр командной строки.
у Вас есть две опции:
zenity
, является полным путем, и файл существует. Что-то как:
#! /bin/bash
OLDIFS="$IFS"
IFS='-'
FILES=($(zenity --file-selection --multiple --separator='-' --title "Pick a file"))
IFS="$OLDIFS"
for file in "${FILES[@]}"
do
if [[ $file == /* && -f $file ]]
then
echo $file
fi
done
, Конечно, даже это не сохраняет нас от имени файла как /foo/bar-/etc/passwd
. Так будьте осторожны, если Ваш сценарий работает с более высокими полномочиями, чем пользователь.