Comando de uma linha para adicionar novos itens ao com.canonical.Unity.Panel systray-whitelist

8

Esta é mais uma questão de como usar a instrução de linha de comando, mais do que como adicionar itens ao painel de notificação do Unity.

Eu tenho que ter uma CLI de uma linha para adicionar um novo item ao systray-whitelist com.canonical.Unity.Panel.

O procedimento padrão para fazer isso é:

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

Nós temos

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

Então nós fazemos o segundo comando

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

Enquanto isso é ótimo e tudo, requer que as pessoas copiem e colem o resultado da primeira linha e, para um script que estou escrevendo, quero fazê-lo em um comando.

Até agora é isso que eu tenho:

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 "\""}'

Eu acho que estou perdendo alguma coisa.

Em primeiro lugar, não tenho certeza se estou inserindo a string corretamente na função gsettings set. Em segundo lugar, enquanto eu acho que estou analisando a saída do gsettings get function corretamente, não encontrei uma maneira de adicionar "" o resultado modificado usando o sed, então tive que canalizar outro comando awk nessa bagunça.

Obrigado a todos que ajudam.

hansioux
fonte
Alguém já testou isso no Ubuntu 12.04? Não o seu trabalho para mim (ele estava trabalhando em versões anteriores)
saeedgnu
gsettings set com.canonical.Unity.Panel systray-whitelist "$ (gsettings recebe com.canonical.Unity.Panel systray-whitelist | sed" s /, * 'yourapp' * // g "| sed" s / 'yourapp' *, * // g "| sed -e" s /] $ /, 'yourapp'] / ")" tente este, substitua yourapp pelo que você precisa.
hansioux

Respostas:

8

Depois de acertar erro após erro, finalmente percebi por que não aceitava as aspas. Você pode simplesmente colocar as aspas em torno da variável real, sem precisar digitá-las no comando real.

Isso funcionará:

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

(Além disso, você precisa remover o 'in sed -e "s /'] $ / no seu exemplo para que isso funcione).

Edição posterior: a propósito, não execute gsettings com sudo ... ele não funcionará.

Alin Andrei
fonte
Esta nova linha que eu criei. Isso removerá todas as entradas anteriores que possam estar na lista de permissões e a adicionará novamente no final. Isto é para scripts de instalação. é força bruta, mas funciona. gsettings set com.canonical.Unity.Panel systray-whitelist "$ (gsettings recebe com.canonical.Unity.Panel systray-whitelist | sed" s /, * 'yourapp' * // g "| sed" s / 'yourapp' *, * // g "| sed -e" s /] $ /, 'yourapp'] / ")"
hansioux