Einzeiliger Befehl zum Hinzufügen neuer Elemente zur com.canonical.Unity.Panel-Systray-Whitelist

8

Dies ist eher eine Frage zur Verwendung von Befehlszeilenanweisungen als zum Hinzufügen von Elementen zum Unity-Benachrichtigungsfeld.

Ich muss eine einzeilige CLI haben, um ein neues Element zur com.canonical.Unity.Panel-Systray-Whitelist hinzuzufügen.

Das Standardverfahren hierfür ist:

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

Wir bekommen

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

Dann machen wir den zweiten Befehl

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

Das ist zwar großartig und alles, aber die Leute müssen das Ergebnis aus der ersten Zeile kopieren und einfügen, und für ein Skript, das ich schreibe, möchte ich es in einem Befehl tun.

Bisher habe ich Folgendes:

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

Ich glaube mir fehlt etwas.

Erstens bin ich mir nicht sicher, ob ich den String korrekt in die Funktion gsettings set weitergebe. Zweitens, während ich denke, dass ich die Ausgabe von gsettings get function richtig analysiere, würde ich keine Möglichkeit finden, das "" um das modifizierte Ergebnis mit sed hinzuzufügen, also musste ich einen weiteren awk-Befehl in dieses Chaos leiten.

Vielen Dank an alle, die helfen.

hansioux
quelle
Hat jemand dies auf Ubuntu 12.04 getestet? Es funktioniert nicht für mich (es hat an früheren Versionen gearbeitet)
saeedgnu
gsettings set com.canonical.Unity.Panel systray-whitelist "$ (gsettings erhalten com.canonical.Unity.Panel systray-whitelist | sed" s /, * 'yourapp' * // g "| sed" s / 'yourapp' *, * // g "| sed -e" s /] $ /, 'yourapp'] / ")" versuchen Sie dies, ersetzen Sie Ihre App durch das, was Sie brauchen.
Hansioux

Antworten:

8

Nachdem ich Fehler für Fehler getroffen hatte, stellte ich schließlich fest, warum die Anführungszeichen nicht akzeptiert wurden. Sie können die Anführungszeichen einfach um die tatsächliche Variable setzen, ohne sie in den tatsächlichen Befehl eingeben zu müssen.

Das wird funktionieren:

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

(Außerdem müssen Sie in Ihrem Beispiel das 'in sed -e "s /'] $ / entfernen, damit dies funktioniert.)

Später bearbeiten: Übrigens, gsettings nicht mit sudo ausführen ... es wird nicht funktionieren.

Alin Andrei
quelle
Diese neue Zeile habe ich mir ausgedacht. Dadurch werden alle vorherigen Einträge entfernt, die möglicherweise die Whitelist sind, und am Ende erneut hinzugefügt. Dies ist für Installationsskripte. Es ist rohe Gewalt, aber es funktioniert. gsettings set com.canonical.Unity.Panel systray-whitelist "$ (gsettings erhalten com.canonical.Unity.Panel systray-whitelist | sed" s /, * 'yourapp' * // g "| sed" s / 'yourapp' *, * // g "| sed -e" s /] $ /, 'yourapp'] / ")"
hansioux