Простой скрипт Zenity - выбрать иконку?

Я пытаюсь создать простой графический скрипт Zenity+Bash, в котором будут перечислены все темы значков, доступные в /usr/share/icons, затем позвольте пользователю выбрать один и нажмите "ОК", чтобы заменить gtk-icon-theme-name="Humanity" в ~/.gtkrc-2.0.mine сказать название темы, которую они выбрали вместо человечества. Я делаю это, чтобы обеспечить графический способ выбора темы значков в Openbox, так как для этого еще нет основной программы.

Это то, что я до сих пор:

#!/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

Это работает, за исключением того, что эхо на самом деле напишет $SELECTED в текстовом файле, вместо того, чтобы взять аргумент и заменить его на выбор пользователя.

Заранее благодарю всех, кто может помочь мне научиться делать это и основы Zenity.

2 ответа

Решение

Это просто Если ты хочешь echo напечатать значение $SELECT, вы не должны использовать одинарные кавычки 'сделать двойные кавычки " вместо. Ниже приведены значения цитирования и обратной косой черты.

  • Двойная кавычка ( "цитата") защищает все, что заключено в две двойные кавычки, кроме $, ', " а также \. Используйте двойные кавычки, когда вам нужны только переменные и подстановка команд.

    • Переменная - Да
    • Подстановочные знаки - нет
    • Подстановка команд - да
  • Одинарная кавычка ( "цитата") защищает все, что заключено в две одинарные кавычки. Он используется для отключения специального значения всех символов.

    • Переменная - нет
    • Подстановочные знаки - нет
    • Подстановка команд - Нет
  • Используйте обратную косую черту ('\'), чтобы изменить специальное значение символов или экранировать специальные символы в тексте, такие как кавычки.

Таким образом, ваша команда должна быть:

#!/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

В дополнение к Tung Tran ваш скрипт требует некоторых улучшений.

Составление сценария в одну строку затрудняет чтение / понимание / отладку. Напишите одну команду на строку:

#!/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

Другой, иногда менее сложный способ встраивания переменной в текстовый вывод - использование printf:

printf 'gtk-icon-theme-name="%s"\n' "$SELECTED" >~/.gtkrc-2.0.mine
Другие вопросы по тегам