Próbuję napisać skrypt bash, który uruchomi program (konsole) i wyśle do niego wiadomości dbus. Oto mój eksperymentmapowanie pid na numery usług qdbus po uruchomieniu
konsole &
echo pid is $!
ps aux | grep konsole
qdbus | grep konsole
ten wyprowadza
pid is 2726
me 2726 0.0 0.4 45404 9952 pts/0 S+ 14:59 0:00 konsole
org.kde.konsole-2729
Nazwa usługi qdbus jest zawsze org.kde.konsole-{pid+epsilon}
ale część epsilon jest nieprzewidywalny.
W moim skrypcie basha, w jaki sposób uzyskać dokładną nazwę usługi qdbus dla konkretnej instancji konsoli, którą właśnie zainicjowałem?
Oto paskudny, hacky rozwiązanie
qdbus | grep konsole | sed 's/[^0-9]//g' > /tmp/before
konsole &
sleep 1
qdbus | grep konsole | sed 's/[^0-9]//g' > /tmp/after
N=`sort /tmp/before /tmp/after | uniq -u`
ale na pewno istnieje lepszy sposób!
'Usługa 'org.kde.konsole' nie istnieje." Ale jeśli uruchomię konsole ręcznie, serwis "org.kde.konsole.12345" (lub podobny) istnieje. 'qdbus | grep konsole' nie wyświetla żadnych wyników, chyba że używam co najmniej jednej konsoli. – spraff