J'essaie de créer un script graphique simple Zenity + Bash qui répertorie tous les thèmes d'icônes disponibles dans /usr/share/icons
, puis laisse l'utilisateur sélectionner un et cliquez sur "OK" pour remplacer gtk-icon-theme-name="Humanity"
dans ~/.gtkrc-2.0.mine
dire le nom du thème qu'ils ont choisi à la place de l'humanité. Je fais cela pour fournir une méthode graphique de choix de votre thème d'icône sous Openbox, car il n'y a pas encore de programme grand public pour cela.
Voici ce que j'ai jusqu'à présent:
#!/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
Cela fonctionne, sauf que echo écrira réellement $SELECTED
dans le fichier texte, au lieu de prendre l'argument et de le remplacer par le choix de l'utilisateur.
Merci d'avance à tous ceux qui peuvent m'aider à apprendre à le faire et aux bases de Zenity.
C'est simple. Si vous voulez que echo
imprime la valeur de $SELECT
, vous ne devez pas utiliser de guillemets simples '
, faites des guillemets doubles "
. Les suivants sont les significations de la citation et de la barre oblique inverse.
Le guillemet double ("quote") protège tout ce qui est placé entre deux guillemets, sauf $
, '
, "
et \
. Utilisez les touches guillemets doubles lorsque vous ne voulez que des variables et une substitution de commande.
Le guillemet simple ("guillemet") protège tout ce qui est compris entre deux guillemets simples. Il est utilisé pour désactiver la signification particulière de tous les caractères.
Utilisez barre oblique inverse ('\') pour modifier la signification particulière des caractères ou pour ignorer des caractères spéciaux dans le texte, tels que des guillemets.
Ainsi, votre commande devrait être:
#!/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
En plus de la réponse de @ TungTran , votre script demande quelques améliorations.
Cramming le script sur une seule ligne, il est difficile de lire/comprendre/déboguer. Ecrivez une commande par ligne:
#!/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
Une autre manière, parfois moins gênante, d’incorporer une variable dans une sortie texte consiste à utiliser printf
:
printf 'gtk-icon-theme-name="%s"\n' "$SELECTED" >~/.gtkrc-2.0.mine