“tipo de arquivo de consulta xdg-mime” retornando um tipo de arquivo diferente de “file --mime-type”

4

Eu tenho um script bash que é executado para criar e-mails. Eu não desejo modificá-lo por enquanto, pois é bastante crítico em meu projeto atual. Um comando não roda o mesmo na máquina operacional e na minha:

xdg-mime query filetype <file>

Ele está sendo executado em um arquivo de texto simples codificado em us-ascii (com uma extensão de arquivo custome). O problema é que, na máquina operacional em que o script funciona, ele retorna plain/text (comportamento esperado). O modo de depuração do xdg-mime mostra que, na verdade, está executando um comando file -i na máquina operacional. Na minha máquina, porém, ele retorna application/octet-stream e executa o comando gnomevfs-info . Parece ter algo a ver com o ambiente de desktop (ambas as máquinas estão rodando no gnome).

Existe uma maneira de forçar o xdg-mime a executar file -i ? Ou para fazer com que gnomevfs-info retorne o tipo correto de mime? Eu tentei desarmar GNOME_DESKTOP_SESSION_ID mas aqui está o que xdg-mime faz:

detectDE()
{
    if [ x"$KDE_FULL_SESSION" = x"true" ]; then DE=kde;
    elif [ x"$GNOME_DESKTOP_SESSION_ID" != x"" ]; then DE=gnome;
    elif 'dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.GetNameOwner string:org.gnome.SessionManager > /dev/null 2>&1' ; then DE=gnome;
    elif xprop -root _DT_SAVE_MODE 2> /dev/null | grep ' = \"xfce4\"$' >/dev/null 2>&1; then DE=xfce;
    fi
}

O terceiro elif é o que leva a xdg-mime usando gnomevfs-info over file -i , porque o comando retorna 0 e DE é definido como gnome. Eu tentei olhar para man pages, mas esse comando dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.GetNameOwner string:org.gnome.SessionManager > /dev/null 2>&1 é rabisco para mim.

    
por Valentin B. 18.01.2017 / 18:05

2 respostas

3

Se você conhece suas extensões de arquivo de texto personalizadas com antecedência, basta registrar uma nova entrada MIME para elas, como uma solução alternativa.

Por exemplo se seus arquivos tiverem uma extensão ".list":

Prepare o arquivo do descritor: zeppelin-list.xml

<?xml version="1.0"?>
<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
  <mime-type type="text/plain">
    <comment>List file type</comment>
    <glob pattern="*.list"/>
  </mime-type>
</mime-info>

Registre uma nova entrada MIME:

%xdg-mime install zeppelin-list.xml

Consulta:

%xdg-mime query filetype my.list
text/plain
    
por 11.04.2017 / 22:22
2

xdg-mime é um componente essencial de seu ambiente de área de trabalho e você não deve tentar alterar seu comportamento. Eu entendo seus medos de quebrar seu roteiro de missão crítica, mas se ele produzir resultados diferentes na máquina operacional e na máquina de teste, ele já está quebrado e deve ser corrigido. Basicamente,

file -b --mime-type <file>

é um substituto imediato de

xdg-mime query filetype <file>

e alterá-lo deve ser indolor, especialmente se o seu comportamento preferido for a saída de file -i .

Os comandos xdg-* dependem do design no ambiente de área de trabalho em que você está executando (lembre-se de que o prefixo representa X D esktop roup ) e, em princípio, eles não devem ser usados em scripts não destinados à interação do usuário.

Se você quiser exatamente o mesmo comportamento em todos os sistemas, use comandos como file , que devem se comportar sempre da mesma maneira (OK, eles podem ser pequenas diferenças de versão, mas é inevitável).

Se você quer o comportamento “mais sensato” para cada sistema, use esses comandos wrapper como xdg-mime e esteja preparado para se adaptar à sua ideia de “mais sensível” em cada sistema.

A coisa errada a fazer é tentar mudar cada ambiente para que os programas dependentes do ambiente se comportem da mesma forma.

    
por 12.04.2017 / 03:09