Abra apps Flatpak com um comando mais simples

Essa dica é especialmente útil para quem gosta de manipular softwares em flatpak usando o terminal. Especialmente abrir, mesmo que seja por motivos de debug.

Por padrão, a forma comum de abrir um aplicativo no formato flatpak é usando o comando:

flatpak run ID_DO_APP

Algo como o comando abaixo, se o app em questão fosse o VLC:

flatpak run org.videolan.VLC 

O problema, claro, é que os nomes são pouco memoráveis e muitas vezes são longos demais.

Sério, estava testando um esses dias cujo ID era “com.github.alexkdeveloper.desktop-files-creator”, haja dedos!

Usando uma função para o Bash

Uma solução que encontrei foi usar uma função no arquivo do bash_aliases para contornar o problema.

Você pode editar o arquivo usando o nano, ou qualquer outro editor de textos de sua preferência.


nano ~/.bash_aliases 

Ao final do arquivo cole a seguinte função:

##função para abrir flatpaks pelo ID

function flatrun(){
    app_name="$@"
    app_id=$(flatpak list | grep -F -i "$app_name" | awk '{for(i=1;i<=NF;i++){ if($i ~ /\S+\.\S*/){print $i; break;} } }');
    flatpak run $app_id
}

Salve o arquivo e feche (Ctrl+X e depois S)

Agora vamos recarregar o arquivo para a função passar a funcionar.

source ~/.bash_aliases 

Como usar

O nome da nossa função é flatrun, então basta digitar esse comando com o ID do App, no caso do VLC o comando seria:

flatrun VLC

No caso daquele programa com ID gigante que eu mencionei antes, ficaria:

flatrun desktop-files-creator

Não tão pequeno ainda… mas, bem mais fácil, né? :sweat_smile:

Claro, dá pra se ter outras variações também, como pegar o nome do App ao invés do ID, mas como o nome de alguns apps tem espaços, podem ter acentos ou às vezes nem tem o nome do app em si, mas o nome do autor no lugar, acho que essa forma é mais eficiente e que deve gerar menos erros.

:vulcan_salute:

14 curtidas

Passando para sugerir uma versão 2.0, usando a opção do flatpak list que exibe somente uma coluna da lista:

function flatrun(){
    flatpak run "$(flatpak list --columns=application | grep -F -i "$1")" "${@:2}"
}

Aproveitei para os argumentos seguintes ao nome do programa desejado serem passados a próprio – assim, é possível rodar flatrun vlc vídeo.mkv.


O flatpak list não é uma exceção, vários programas com saída tradicionalmente em colunas (ps, lsblk, etc.) têm opções semelhantes para tornar mais prática a análise em scripts. Isso ajuda o seu script a se tornar robusto em situações que os dados são “cabeludos” (como as que o Dio citou no fim do tópico).

7 curtidas

Muito bom, eu só faria um ajuste para que mostrasse se não achou o aplicativo:

## Função para abrir flatpaks pelo ID
function flatrun() {
    local app_name="$*"
    local app_id

    app_id=$(flatpak list --columns=application | grep -F -i "$app_name")

    if [[ -n $app_id ]]; then
        flatpak run "$app_id"
    else
        echo "Aplicativo não encontrado: $app_name"
    fi
}

4 curtidas

Versão 4.0, combinando o @Dio, o @Capezotte e o @Karan_Luciano e meu TDA misturado com autismo: use o recurso que permite lidar com o erro de comando não encontrado (command_not_found_handle):

function command_not_found_handle() {
    local app_id=$(flatpak list --columns=application | grep -F -i "${1}")

    if [[ -n "${app_id}" ]]; then
       flatpak run "${app_id}" "${@:2}"
    else
        [ -f "/usr/lib/command-not-found" ] && {
          /usr/lib/command-not-found "${1}"
        } || echo "${1}: command not found"
    fi
}

Assim não é preciso sequer usar o nome da função:

nautilusdevel /usr
3 curtidas

Minha pequena contribuição:

function flatrun() {
    local app_id=$(flatpak list --columns=application | grep -F -i "${1}")

    if [[ -n "${app_id}" ]]; then
       flatpak run "${app_id}" "${@:2}"
    else
        [ -f "/usr/lib/command-not-found" ] && {
          /usr/lib/command-not-found "${1}"
        } || echo "${1}: no flatpak with this name was found"
    fi
}

Tornei o código mais claro. command not found poderia dar a ideia de que o programa não está instalado, mas ele pode estar instalado em outro formato de empacotamento.

Esse insight me ocorreu porque fui testar com o vlc, mas o meu vlc é rpm. kkkkk

6 curtidas