Однострочная команда для добавления новых элементов в com.canonical.Unity.Panel systray-whitelist

Это скорее вопрос о том, как использовать командную строку, а не о том, как добавлять элементы на панель уведомлений Unity.

У меня должен быть однострочный CLI, чтобы добавить новый элемент в системный белый список com.canonical.Unity.Panel.

Стандартная процедура для этого:

sudo gsettings get com.canonical.Unity.Panel systray-whitelist

Мы получаем

['JavaEmbeddedFrame', 'Wine', 'Skype']

Затем мы делаем вторую команду

sudo gsettings set com.canonical.Unity.Panel systray-whitelist "['JavaEmbeddedFrame', 'Wine', 'Skype', 'shutter']"

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

Пока это то, что у меня есть:

sudo gsettings set com.canonical.Unity.Panel systray-whitelist | gsettings get com.canonical.Unity.Panel systray-whitelist | sed -e "s/']$/,'shutter']/" | awk 'NF{print "\"" $0 "\""}'

Я думаю, что что-то упустил.

Во-первых, я не уверен, правильно ли я передаю строку в функцию set gsettings. Во-вторых, хотя я думаю, что я правильно разбираю вывод функции gsettings get, я не смог бы найти способ добавить " " к измененному результату с помощью sed, поэтому мне пришлось направить еще одну команду awk в этот беспорядок.

Спасибо всем, кто помогает.

1 ответ

Решение

После нажатия ошибки за ошибкой я наконец понял, почему он не принимает кавычки. Вы можете просто поместить кавычки вокруг фактической переменной, нет необходимости вводить их в фактическую команду.

Это будет работать:

gsettings set com.canonical.Unity.Panel systray-whitelist "$(gsettings get com.canonical.Unity.Panel systray-whitelist | sed -e "s/]$/, 'shutter']/")"

(Также вам нужно удалить ' in sed -e "s/']$/ в вашем примере, чтобы это работало).

Позже отредактируйте: кстати, не запускайте gsettings с помощью sudo... это не сработает.

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