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:

  • MacOS: open
  • Windows/Cygwin: cygstart
  • Android/termux: xdg-open.

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
Linuxlinux-gnu
Cygwincygwin
bash no Windows 10linux-gnu
OpenBSDopenbsd*
FreeBSDFreeBSD
NetBSDnetbsd
Mac OSdarwin*
iOSdarwin9
Solarissolaris*
Android (termux)linux-android*
Androidlinux-gnu
Haiku OShaiku

Fontes