Простой скрипт 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