Если вы можете установить файл с помощью
gsettings set org.gnome.desktop.background picture-uri file:///path/to/the/file
, вы можете получить файл с помощью
gsettings get org.gnome.desktop.background picture-uri
. Это даст вам строку типа ' file: ///usr/share/images/desktop-base/desktop-background.xml '
, что неплохо, но необходимо проанализировать, прежде чем мы сможем напрямую использовать его в качестве аргумента для другой команды оболочки. Таким образом, мы можем легко вырезать кавычки и часть file: //
с помощью cut
, например:
gsettings get org.gnome.desktop.background picture-uri | cut -d/ -f3- | cut -d\' -f1
(Примечание: возвращаемый файл на самом деле является файлом XML для меня, но Я не использую GNOME, поэтому не знаю, как это работает в реальной системе. Здесь может быть еще один этап обработки, который должен произойти здесь, прежде чем вы сможете начать сравнение файлов.)
И поскольку вы уже знаете, имя файла, с которым вы хотите сравнить, вы можете использовать cmp
для сравнения этих двух файлов:
cmp my/file.jpg "$(gsettings get org.gnome.desktop.background picture-uri | cut -d/ -f3- | cut -d\' -f1)"
cmp
установит возвращаемое значение 0
(истина), если файлы одинаковые, или ненулевое значение (false), если они разные или что-то пошло не так. Мы можем использовать это, чтобы решить, что делать дальше, возможно, используя оператор ||
, который запустит команду, только если предыдущая команда вернула ненулевое значение (false). Мы также можем подавить вывод из cmp
с помощью переключателя -s
. Это дает нам команду, которую вы могли бы, например, запустить как обычное задание cron:
cmp -s my/file.jpg "$(gsettings get org.gnome.desktop.background picture-uri | cut -d/ -f3- | cut -d\' -f1)" || gsettings set org.gnome.desktop.background picture-uri file:///full/path/to/my/file.jpg