Я пытаюсь создать простой графический скрипт Zenity + Bash, который будет перечислять все темы значков, доступные в /usr/share/icons
, затем позволить пользователю выбрать одну и нажать «OK», чтобы заменить 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
Это работает, за исключением того, что echo на самом деле напишет $SELECTED
в текстовый файл, вместо того, чтобы взять аргумент и заменить его на выбор пользователя.
Заранее благодарю всех, кто может помочь мне научиться делать это и основы Zenity.
echo
напечатало значение $SELECT
, вы не должны использовать одинарные кавычки '
, вместо этого используйте двойные кавычки "
. Ниже приведены значения цитирования и обратной косой черты.
Двойная кавычка («кавычка») защищает все, что заключено между двумя двойными кавычками, кроме $
, '
, "
и \
. Используйте двойные кавычки, когда вам нужны только переменные и подстановка команд.
Одиночная кавычка [ 1124] («цитата») защищает все, что заключено в две одинарные кавычки. Он используется для отключения специального значения всех символов.
Использовать обратную косую черту ] ('\'), чтобы изменить специальное значение символов или экранировать специальные символы в тексте, такие как кавычки.
Таким образом, ваша команда должна быть:
#!/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
В дополнение к ответ @TungTran, Ваш сценарий просит о некоторых улучшениях.
Зубрежка сценарий на одной строке мешает читать/понимать/отлаживать. Запишите одну команду на строку:
#!/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