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

8

Это скорее вопрос о том, как использовать командную строку, а не о том, как добавлять элементы на панель уведомлений 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 "\""}'

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

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

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

hansioux
источник
Кто-нибудь проверял это на Ubuntu 12.04? Это не работает для меня (это работало на предыдущих версиях)
saeedgnu
gsettings set com.canonical.Unity.Panel systray-whitelist "$ (gsettings get com.canonical.Unity.Panel systray-whitelist | sed" s /, * 'yourapp' * // g "| sed" s / 'yourapp' *, * // g "| sed -e" s /] $ /, 'yourapp'] / ")" попробуйте это, замените yourapp тем, что вам нужно.
Хансиу

Ответы:

8

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

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

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 ... это не сработает.

Алин Андрей
источник
Эта новая строка, которую я придумал. Это удалит все предыдущие записи, которые могут быть белым списком, и добавит их снова в конце. Это для установки скриптов. это грубая сила, но это работает. gsettings set com.canonical.Unity.Panel systray-whitelist "$ (gsettings get com.canonical.Unity.Panel systray-whitelist | sed" s /, * 'yourapp' * // g "| sed" s / 'yourapp' *, * // g "| sed -e" s /] $ /, 'yourapp'] / ")"
hansioux