Commande sur une ligne pour ajouter de nouveaux éléments à com.canonical.Unity.Panel systray-whitelist

8

Il s'agit davantage d'une question sur l'utilisation de l'instruction en ligne de commande que sur la façon d'ajouter des éléments au panneau de notification Unity.

Je dois avoir une CLI sur une ligne pour ajouter un nouvel élément à la liste blanche systray com.canonical.Unity.Panel.

La procédure standard pour ce faire est la suivante:

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

On a

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

Ensuite, nous faisons la deuxième commande

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

Bien que ce soit génial et tout, cela nécessite que les gens copient et collent le résultat de la première ligne, et pour un script que j'écris, je veux le faire en une seule commande.

Jusqu'à présent, voici ce que j'ai:

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

Je pense que je manque quelque chose.

Premièrement, je ne suis pas sûr de canaliser correctement la chaîne dans la fonction set gsettings. Deuxièmement, bien que je pense que j'analyse la sortie de gsettings get function correctement, je ne trouverais pas un moyen d'ajouter le "" autour du résultat modifié en utilisant sed, j'ai donc dû diriger une autre commande awk dans ce bordel.

Merci à tous ceux qui aident.

hansioux
la source
Quelqu'un l'a-t-il testé sur Ubuntu 12.04? Cela ne fonctionne pas pour moi (il fonctionnait sur les versions précédentes)
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'] / ")" essayez celui-ci, remplacez votre application par ce dont vous avez besoin.
hansioux

Réponses:

8

Après avoir frappé erreur après erreur, j'ai finalement compris pourquoi il n'acceptait pas les citations. Vous pouvez simplement placer les guillemets autour de la variable réelle, pas besoin de les saisir dans la commande réelle.

Cela fonctionnera:

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

(De plus, vous devez supprimer le 'in sed -e "s /'] $ / dans votre exemple pour que cela fonctionne).

Edition ultérieure: au fait, ne lancez pas gsettings avec sudo ... cela ne fonctionnera pas.

Alin Andrei
la source
Cette nouvelle ligne que j'ai imaginée. Cela supprimera toutes les entrées précédentes qui pourraient être la liste blanche et l'ajoutera à nouveau à la fin. C'est pour les scripts d'installation. c'est de la force brute mais ça marche. 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