Is there a way to open a file with the default program using command-line instead?
Este é um trabalho para xdg-open
:
xdg-open opens a file or URL in the user's preferred application. If a URL is provided the URL will be opened in the user's preferred web browser. If a file is provided the file will be opened in the preferred application for files of that type. xdg-open supports file, ftp, http and https URLs.
-
Sintaxe para abrir um arquivo com seu aplicativo padrão:
xdg-open {file}
O xdg-open vem pré-instalado no Ubuntu.
Alternatively, is there a way, given a file extension, to determine a command to open it?
Pela extensão, não. O aplicativo padrão é escolhido com base no tipo MIME, não na extensão. O Linux não tem "extensões".
Para um arquivo específico, você pode usar xdg-mime
para determinar o tipo MIME do arquivo e o aplicativo padrão associado a ele:
-
Sintaxe para exibir o tipo MIME de um arquivo:
xdg-mime query filetype {file}
-
Sintaxe para exibir o aplicativo padrão do tipo MIME:
xdg-mime query default {mimetype}
-
Sintaxe para exibir o aplicativo padrão de um arquivo:
xdg-mime query default "$(xdg-mime query filetype {file})"
Como solução alternativa (hacky) você pode usar o comando
xdg-mime query default \
'xdg-mime query filetype "$(find ~ / -iname '*.png' -print -quit)"'
para exibir o aplicativo padrão para, por exemplo, imagens PNG.
Isso funcionará se, e somente se, você tiver uma imagem PNG no computador e o primeiro arquivo encontrado que termina com .png
for uma imagem PNG válida.