Brincando no meu sistema, me deparei com
~$ echo $XDG_DATA_DIRS
/usr/share/ubuntustudio:/usr/share/xfce4:/usr/local/share:/usr/share:/var/lib/snapd/desktop:/usr/share
Me perguntando por que /usr/share
está duas vezes no caminho descobri que o trecho a seguir no
/etc/alternatinves/x-session-manager
qual está um link para /usr/bin/startxfce4
é o responsável:
#!/bin/sh
.
.
.
if test "x$XDG_DATA_DIRS" = "x"
then
if test "x/usr/share" = "x/usr/local/share" -o "x/usr/share" = "x/usr/share"; then
XDG_DATA_DIRS="/usr/local/share:/usr/share"
else
XDG_DATA_DIRS="/usr/share:/usr/local/share:/usr/share"
fi
else
XDG_DATA_DIRS="$XDG_DATA_DIRS:/usr/share"
fi
export XDG_DATA_DIRS
.
.
.
Quando eu olho para a linha
if test "x/usr/share" = "x/usr/local/share" -o "x/usr/share" = "x/usr/share"; then
Eu tenho dificuldades para entender esta declaração if, para mim parece uma comparação de strings onde a primeira é sempre falsa e a segunda é sempre verdadeira.
Combinado com uma lógica or
, o teste sempre avalia como true , então eu poderia encurtar a linha para
if true; then
ou poderia dizer que não preciso de uma instrução if.
Onde está o meu erro? Ou está escrito assim para confundir iniciantes como eu?
Você está certo, o comando
retorna verdadeiro (0) sempre.
Parece que o arquivo em questão foi gerado a partir de uma versão mais genérica, mas a forma de geração não foi a ideal. O script deve solicitar caminhos reais a cada vez ou manter apenas a ramificação relevante no arquivo gerado.
No entanto, este arquivo específico vem de um pacote – não sendo gerado em sua máquina. É provável que isso seja corrigido/melhorado… Você pode registrar um bug no Xfce Bugzilla (se ainda não estiver presente lá) ou corrigi-lo você mesmo. Você pode clonar o repositório Git para a sessão do Xfce4 , você também pode entrar em contato com os desenvolvedores do Xfce4 usando sua lista de discussão . Boa sorte com a melhoria do código!
O script
/usr/bin/startxfce4
parece ser gerado por um analisador, podemos ver que quando olhamos o código fonte , vamos dar uma olhada no trecho correspondente:Aqui podemos ver o significado deste bloco if, os desenvolvedores dão aos mantenedores de pacotes a oportunidade de adicionar um caminho personalizado
XDG_DATA_DIRS
analisando o caminho desejado para o script e substituindo a string@_datadir_@
por esse caminho.Isso funcionará perfeitamente, se for analisado um caminho que não esteja contido no
XDG_DATA_DIRS
momento em que o script for executado, mas resultará no mesmo caminho aparecendo duas vezesXDG_DATA_DIRS
se analisarmos um caminho que já existe noXDG_DATA_DIRS
momento em que o script é executado.Isso pode ser evitado não analisando as pastas XDG padrão (
/usr/share
,/usr/local/share
) para o script, mas não sei se isso é possível.Outra solução é alterar o código-fonte para
Isso cobriria apenas os diretórios
/usr/share
e/usr/local/share
embora e deve-se verificar se@_datadir_@
já existeXDG_DATA_DIRS
ou não, mas não sei quem fazer isso, meu conhecimento termina aqui.Além disso:
O mesmo se aplica a esta parte do script:
Quando analisamos
/etc/xdg
/ para substituir@_sysconfdir_@
, ele leva a um caminho duplicado (/etc/xdg:/etc/xdg
emXDG_CONFIG_DIRS
.Saudações
Eu sou um usuário final, longe de ser um desenvolvedor, então não consigo resolver o problema completamente. Graças à sobremesa e ao Melebius que me empurraram na direção certa, pelo menos eu entendo essa declaração se-então-agora.
Acredito que não há mal nenhum em ter um caminho duas vezes nestas variáveis de ambiente, então vou me abster de relatar um bug. Deixe os desenvolvedores fazerem coisas mais valiosas.
Minha solução pessoal
Eu mudei as linhas 67-89 em
/usr/bin/startxfce4
para
Claro, eu fiz backup do arquivo original primeiro.