Script Zenity simples - para selecionar o ícone?

4

Estou tentando criar um script Zenity + Bash gráfico simples que listará todos os temas de ícones disponíveis em /usr/share/icons e, em seguida, permitir que o usuário selecione um e clique em "OK" para substituir gtk-icon-theme-name="Humanity" in ~/.gtkrc-2.0.mine o nome do tema que escolheram em vez da Humanidade. Eu estou fazendo isso para fornecer um método gráfico de escolher o seu tema de ícones no Openbox, uma vez que não existe um programa mainstream para isso ainda.

Isso é o que eu tenho até agora:

#!/bin/bash
ICONS=$(ls -I "*.*" /usr/share/icons); SELECTED=$(zenity --list --column=/usr/share/icons \ $ICONS); echo 'gtk-icon-theme-name="$SELECTED"' >~/.gtkrc-2.0.mine

Funciona, exceto que o eco realmente grava $SELECTED no arquivo de texto, em vez de usar o argumento e substituí-lo pela escolha do usuário.

Agradeço antecipadamente a qualquer pessoa que possa me ajudar a aprender como fazer isso e o básico do Zenity.

    
por ovine 28.12.2015 / 03:05

2 respostas

3

Isso é simples. Se você quiser que echo imprima o valor de $SELECT , não use aspas simples ' , em vez disso, faça aspas duplas " . Seguimentos são os significados de citações e contrabarra.

  • As aspas duplas ("quote") protegem tudo entre dois marcas de aspas duplas, exceto $ , ' , " e \ .Use aspas duplas quando você quer apenas variáveis e substituição de comandos.

    • Variável - Sim
    • Wildcards - Não
    • Substituição de comando - sim
  • A citação única ('citação') protege tudo entre dois marcas de aspas simples. É usado para desligar o significado especial de todos caracteres.

    • Variável - Não
    • Wildcards - Não
    • Substituição de comando - Não
  • Use barra invertida ('\') para alterar o significado especial dos caracteres ou para escape de caracteres especiais dentro do texto, como aspas.

Assim seu comando deve ser:

#!/bin/bash
ICONS=$(ls -I "*.*" /usr/share/icons); SELECTED=$(zenity --list --column=/usr/share/icons \ $ICONS); echo "gtk-icon-theme-name=\"$SELECTED\"" >~/.gtkrc-2.0.mine
    
por Tung Tran 28.12.2015 / 05:41
1

Além da resposta do @TungTran , seu script implora por algumas melhorias.

A compactação do script em uma única linha dificulta a leitura / compreensão / depuração. Escreva um comando por linha:

#!/bin/bash
ICONS=$(ls -I "*.*" /usr/share/icons)
SELECTED=$(zenity --list --column=/usr/share/icons \ $ICONS)
echo "gtk-icon-theme-name=\"$SELECTED\"" >~/.gtkrc-2.0.mine

Outra maneira, às vezes, menos problemática de incorporar uma variável na saída de texto é usar printf :

printf 'gtk-icon-theme-name="%s"\n' "$SELECTED" >~/.gtkrc-2.0.mine
    
por janos 29.12.2015 / 08:00