Как я могу написать сценарий bash, который отправляет графическое уведомление на X дисплеи всех пользователей?

Программы, использующие вашу библиотеку, должны быть связаны с libNAME. so, если им нужна последняя версия, с libNAME.so.X, если им нужна последняя из основных версий X, и с libNAME.so.X.Y, если им нужна конкретная младшая версия.

Если вы просто предоставите дополнительные ссылки для libNAME.so, libNAME.so.X и libNAME.so.X.Y на libNAME.so.X.Y.Z, то все они будут использовать последнюю версию, и вы всегда сможете обновить эти ссылки.

Предположим, что устанавливаемая вами версия бампирует минорную версию, до этого времени. ссылки будут (предположим, что Y-1 - это номер до Y и z последнего патча серии X.Y-1):

libNAME.so -> libNAME.so.X.Y-1.z
libNAME.so.X -> libNAME.so.X.Y-1.z
libNAME.so.X.Y-1 -> libNAME.so.X.Y-1.z

после установки обновления (Z, вероятно, 0, может быть, 1):

libNAME.so -> libNAME.so.X.Y.Z
libNAME.so.X -> libNAME.so.X.Y.Z
libNAME.so.X.Y-1 -> libNAME.so.X.Y-1.z
libNAME.so.X.Y -> libNAME.so.X.Y.Z

любая программа, явно связанная с использованием X.Y-1, все равно найдет файл X.Y-1.z.

Следуя этой схеме, нет необходимости обновлять какие-либо из предыдущих ссылок, кроме указанных, и вы можете определить, какие из них являются ссылками, независимо от того, изменились ли ваши основные, второстепенные или патч-номера (1, 2, или 3 ссылки).

Раньше гораздо чаще в вашей системе были старые версии библиотек с такими "промежуточными" ссылками. Но управление пакетами часто отнимает старые версии.¹

¹ Мне всегда нравился такой способ, когда я полагался на ссылки, чтобы получить самую последнюю версию, если не просил явно старую. На конференции Microsoft MFC (1994), где DLL были представлены в качестве -решения для разделяемых библиотек, я обратил внимание докладчика на проблему доступа к старым версиям без такой уже проверенной схемы. Фразу "DLL ад" на тот момент еще предстояло изобрести.

1
13.04.2017, 15:36
1 ответ

Наконец, я сам нашел ответ в этой бесценной базе данных StackExchange Unix & Linux !!!

В дополнение к ответам на вопросы выше, я также использовал общепринятый ответ на этот вопрос: Прочтите два текстовых файла, объедините каждую строку

И вот ответ на мой вопрос выше:

#!/bin/bash
xuser=$(who | grep ' \:[0-9]' | awk '{print $1}')
xdisplay=$(who | grep ' \:[0-9]' | awk '{print $5}' | sed 's/[(|)]//g')
echo "$xuser" > /tmp/xusers.txt
echo "$xdisplay" > /tmp/xdisplays.txt
while read -r -u3 xuser; read -r -u4 xdisplay; do
    DISPLAY="$xdisplay" XAUTHORITY=/home/"$xuser"/.Xauthority su "$xuser" -c "notify-send 'Message multi-user'"
done 3</tmp/xusers.txt 4</tmp/xdisplays.txt
0
28.01.2020, 01:34

Теги

Похожие вопросы