Comando de una línea para agregar nuevos elementos a com.canonical.Unity.Panel systray-whitelist

8

Esta es más una pregunta sobre cómo usar la instrucción de línea de comandos que cómo agregar elementos al panel de notificaciones de Unity.

Tengo que tener una CLI de una línea para agregar un nuevo elemento a com.canonical.Unity.Panel systray-whitelist.

El procedimiento estándar para hacerlo es:

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

Obtenemos

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

Luego hacemos el segundo comando

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

Si bien eso es excelente, requiere que la gente copie y pegue el resultado desde la primera línea, y para un script que estoy escribiendo, quiero hacerlo en un solo comando.

Hasta ahora esto es lo que tengo:

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

Creo que me estoy perdiendo algo.

En primer lugar, no estoy seguro de si estoy canalizando la cadena en la función de conjunto de ajustes correctamente. En segundo lugar, aunque creo que estoy analizando la salida de gsettings get function correctamente, no encontraría una manera de agregar el "" alrededor del resultado modificado usando sed, así que tuve que canalizar otro comando awk en este lío.

Gracias a todos los que ayudan.

hansioux
fuente
¿Alguien ha probado esto en Ubuntu 12.04? No funciona para mí (estaba funcionando en versiones anteriores)
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'] / ")" pruebe este, reemplace yourapp con lo que necesita.
hansioux

Respuestas:

8

Después de presionar error tras error, finalmente me di cuenta de por qué no aceptaba las comillas. Simplemente puede colocar las comillas alrededor de la variable real, sin necesidad de ingresarlas en el comando real.

Esto funcionará:

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

(Además, debe eliminar 'in sed -e "s /'] $ / en su ejemplo para que esto funcione).

Edición posterior: por cierto, no ejecute gsettings con sudo ... no funcionará.

Alin Andrei
fuente
Esta nueva línea que se me ocurrió. Esto eliminará cualquier entrada anterior que pueda ser la lista blanca y la agregará nuevamente al final. Esto es para instalar scripts. es fuerza bruta pero funciona. 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