用于将新项添加到com.canonical.Unity.Panel systray-whitelist的一行命令

这更像是如何使用命令行指令问题而不是如何将项目添加到Unity通知面板。

我必须有一个单行CLI来向com.canonical.Unity.Panel systray-whitelist添加一个新项目。

这样做的标准程序是:

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命令输入到这个混乱中。

感谢任何有帮助的人。

在发生错误后遇到错误后,我终于想出了为什么它不接受引号。 您可以简单地将引号放在实际变量周围,无需在实际命令中输入它们。

这将有效:

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

(另外,你需要在你的例子中删除’in sed -e“s /’] $ /才能使其工作)。

稍后编辑:顺便说一下,不要用sudo运行gsettings ……它将无法正常工作。