bash Определение приложения по mime типу

Решил тут поупражняться в скриптах.

Задача найти приложения для файла по его mime-типу.

Другими словами взять тип файла, заглянуть в /etc/mime.types, где уточнить группу, затем в /usr/share/applications/mimeinfo.cache найти список .desktop-файлов.

получилось немного топорно, но работает :
[user@server эмблемы и флаги]$ (cat /usr/share/applications/mimeinfo.cache | grep '/'$(cat /etc/mime.types | grep $(file -i ./AS_symbol.bmp | cut -d':' -f2 | cut -d' ' -f2 | cut -d';' -f1) | cut -f5)'=') | cut -d'=' -f2
mtpaint.desktop;gimp.desktop;gpicview.desktop;
[user@server эмблемы и флаги]$ 

Вопрос собственно вот в чем, меня смущает вот это выделенный участок команды:
(cat /usr/share/applications/mimeinfo.cache | grep ‘/’$(cat /etc/mime.types | grep $(file -i ./AS_symbol.bmp | cut -d':' -f2 | cut -d' ‘ -f2 | cut -d’;' -f1) | cut -f5)'=') | cut -d'=' -f2

дело в том, что у меня в файле /etc/mimeinfo.cache колонки разделены ровно 4 символами tab
image/x-ms-bmp				bmp
image/x-pcx				pcx
image/x-photoshop				psd
image/x-pict				pct pic

Однако, при редактировании /etc/mimeinfo.cache это расстояние может измениться (или использовали не tab-клавишу а пробел) и соответственно работа скрипта нарушится. Подскажите как усовершенствовать команду?
Другие подходы к решению задачи - также приветствуются.
xdg-mime query default $(file -b --mime-type "path/to/your/file/here")

а для переменных разделителей можно использовать awk:
... | awk '{ FS=" |\t" ; print $2 }'
в FS указываются разделители (пробел или символ табуляции).
xdg-mime query default $(file -b --mime-type "path/to/your/file/here")
это он выдернул приложение по умолчанию
[user@server Backgrounds]$ xdg-mime query default $(file -b --mime-type ./03cf181c82747cbde1c9ea38abcccede.jpg)
gpicview.desktop
[user@server Backgrounds]$
что тоже не плохо, но нужен список
[user@server Backgrounds]$ cat /usr/share/applications/mimeinfo.cache | grep '/'$(cat /etc/mime.types | grep $(file -i ./03cf181c82747cbde1c9ea38abcccede.jpg | cut -d':' -f2 | cut -d' ' -f2 | cut -d';' -f1) | cut -f5 |  cut -d' ' -f1) | cut -d'=' -f2
mtpaint.desktop;gimp.desktop;gpicview.desktop;
[user@server Backgrounds]$ 

по awk не въехал, как его сюда прикрутить ?
minoshi
xdg-mime query default $(file -b --mime-type "path/to/your/file/here")
это он выдернул приложение по умолчанию
[user@server Backgrounds]$ xdg-mime query default $(file -b --mime-type ./03cf181c82747cbde1c9ea38abcccede.jpg)
gpicview.desktop
[user@server Backgrounds]$

minoshi
Задача найти дефолтные приложения для файла по его mime-типу

дефолт это дефолт, не может быть несколько дефолтных значений.

minoshi
что тоже не плохо, но нужен список
[user@server Backgrounds]$ cat /usr/share/applications/mimeinfo.cache | grep '/'$(cat /etc/mime.types | grep $(file -i ./03cf181c82747cbde1c9ea38abcccede.jpg | cut -d':' -f2 | cut -d' ' -f2 | cut -d';' -f1) | cut -f5 |  cut -d' ' -f1) | cut -d'=' -f2
mtpaint.desktop;gimp.desktop;gpicview.desktop;
[user@server Backgrounds]$ 

по awk не въехал, как его сюда прикрутить ?
похоже, что никак. Я пробовал на другом примере, там сработало, здесь в однострочник awk похоже не подойдет, потому что ему нельзя задать диапозон полей для вывода. И вообще у меня там ошибка - задумывалось не FS=“ |\t”, а FS="+"
void
дефолт это дефолт, не может быть несколько дефолтных значений.
Действительно … поправил условие задачи в первом посте.

Тем не менее задача пока не решена :(
Хотя нет, вот так вроде работает.

[user@server Backgrounds]$ cat /usr/share/applications/mimeinfo.cache | grep $(xdg-mime query filetype ./03cf181c82747cbde1c9ea38abcccede.jpg | cut -d ';' -f1) | cut -d '=' -f2
mtpaint.desktop;gimp.desktop;gpicview.desktop;
[user@server Backgrounds]$ 

Void, спасибо за идею
 
Зарегистрироваться или войдите чтобы оставить сообщение.