Um recurso que facilita muito a vida do usuário quando usando um gerenciador de arquivos no ambiente gráfico é o fato de poder dar um duplo clique no ícone e o sistema já saber qual programa utilizar para abrí-lo.
Conhecendo o xdg-open
Quando estamos utilizando o terminal dentro de um ambiente gráfico podemos ter uma funcionalidade similar usando o comando xdg-open
em sistemas Linux.
Equivalentes ao comando xdg-open
em outros ambientes:
Nos exemplos abaixo vou usar o xdg-open
, mas se você estiver em outro ambiente, substitua-o pelo comando equivalente.
Se tiver com uma janelinha do terminal aberta, basta usar xdg-open arquivo.ext
que o seu ambiente desktop vai detectar qual é o programa padrão para abrir o arquivo.ext
.
E uma coisa interessante é que isso também serve para URLs, fazendo com que o seu navegador padrão seja aberto tentando visitar a URL que passada como parâmetro. Exemplo:
xdg-open 'https://meleu.sh/'
Eis uma tradução livre da descrição que vemos na própria manpage do xdg-open
:
xdg-open abre um arquivo ou URL na aplicação preferida do usuário. Se uma URL for fornecida, a URL será aberta no browser padrão. Se um arquivo for fornecido, o arquivo será aberto na aplicação padrão para arquivos daquele tipo.
A disponibilidade deste comando vai depender do ambiente Desktop que você está utilizando e se ele segue os padrões do freedesktop.org.
O freedesktop é um projeto focado em criar especificações para facilitar a interoperabiliade e compartilhamento de tecnologia para sistemas gráficos e de desktop de código aberto.
Uma pequena (e incompleta) lista dos ambientes desktop que aderem aos padrões do freedesktop pode ser encontrada aqui: https://www.freedesktop.org/wiki/Desktops/
Muitas das especificações produzidas pelo freedesktop recebem o nome XDG, uma sigla para Cross-Desktop Group. E muitos aplicativos feitos para implementar estas especificações começam com o prefixo xdg-
. Experimente ir no seu terminal e digitar xdg-
e pressionar TAB TAB, que você verá uma lista de aplicativos disponíveis.
Se tiver mais interesse nesse assunto, siga os links da seção Fontes.
Bônus
Vou aproveitar o tema e mostrar uma breve função onde usamos a variável builtin $OSTYPE
, específica do bash, para detectar o Sistema Operacional. Outra opção é utilizar uname
, mas eu gosto de usar soluções em bash puro. :)
Quando você chama a função openFile
, ela vai detectar em qual Sistema Operacional você está e executa o comando correspondente.
É um exemplo bem simples. Se precisar de algo mais robusto é preciso trabalhar um pouco mais nesse código.
# $OSTYPE é uma variável embutida do bash pode
# ser uma maneira interessante de detectar o SO
openFile() {
local args="$@"
case "$OSTYPE" in
"cygwin"*)
cygstart "$args"
;;
"darwin"*) # MacOS
open "$args"
;;
*)
xdg-open "$args"
;;
esac
}
Algumas opções válidas para $OSTYPE
que vi em uma postagem no GitHub:
Sistema Operacional | $OSTYPE |
---|---|
Linux | linux-gnu |
Cygwin | cygwin |
bash no Windows 10 | linux-gnu |
OpenBSD | openbsd* |
FreeBSD | FreeBSD |
NetBSD | netbsd |
Mac OS | darwin* |
iOS | darwin9 |
Solaris | solaris* |
Android (termux) | linux-android* |
Android | linux-gnu |
Haiku OS | haiku |