Deixe-me começar dizendo que isso é o que eu considero uma solução "boa o suficiente" porque é simples e deve funcionar em muitos casos, mas tenha cuidado em confiar 100%.
which $(grep -m 1 Exec $(locate --existing --limit 1 $(xdg-mime query default x-scheme-handler/http)) | cut -f2 -d'=' | cut -f1 -d' ') > /dev/null ; echo $?
Se as saídas acima forem 0, então a aplicação existe.
Quebrando:
locate --existing --limit 1 $(xdg-mime query default x-scheme-handler/http)
Localiza o primeiro arquivo correspondente ao nome retornado por xdg-mime. O comando locate deve funcionar para isso na maior parte do tempo, pois, na minha experiência, a maioria dos XDG_DATA_DIRS dos sistemas está localizada em / usr / share / usr / local, que geralmente é incluída no banco de dados usado pelo comando locate. No entanto, há casos especiais em que isso pode não ser verdade e / ou deve haver algum pedido para qual arquivo da área de trabalho é lido primeiro e usado (talvez algum arquivo específico do usuário). Então, tecnicamente, isso pode não ser "adequado", mas é simples e mais fácil do que analisar $ XDG_DATA_DIRS e $ XDG_DATA_HOME
grep -m 1 Exec $(locate ...) | cut -f2 -d'=' | cut -f1 -d' '
Isto acelera o resultado de locate (um caminho de arquivo) e tenta recortar o nome do binário ou comando da primeira linha no arquivo com Exec.
which $(grep ...) > /dev/null ; echo $?
Tenta localizar o resultado do grep, descartar a saída padrão e gerar o status de saída (0 em sucesso). Isso pressupõe que o aplicativo esteja no seu PATH.