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

Я пытаюсь создать простой графический скрипт 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.

4
задан 5 December 2017 в 15:01

2 ответа

1118 Это просто. Если вы хотите, чтобы 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
0
ответ дан 5 December 2017 в 15:01

В дополнение к ответ @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
1
ответ дан 6 December 2017 в 01:01
  • 1
    последний порт Exception вопроса? hhhh: p я сожалею о noising Вы – Obada Diab 22 March 2017 в 04:52

Другие вопросы по тегам:

Похожие вопросы: