我正在尝试编写一个bash脚本,该脚本将启动一个程序(konsole)并向其发送dbus消息
konsole &
echo pid is $!
ps aux | grep konsole
qdbus | grep konsole
此输出
pid is 2726
me 2726 0.0 0.4 45404 9952 pts/0 S+ 14:59 0:00 konsole
org.kde.konsole-2729
qdbus服务名称始终是org.kde.konsole-{pid+epsilon}
,但epsilon部分是不可预测的。
在我的bash脚本中,如何获得我刚刚派生的特定konsole实例的确切qdbus服务名称?
这里有一个讨厌的,黑客的解决方案
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`
但肯定有更好的方法!
尝试使用qdbus org.kde.konsole /Konsole newSession
通过D-Bus API启动新的Konsole实例。它将返回会话ID,该会话ID稍后可用于通过调用org.kde.konsole
服务的/Session/$SID
对象来控制它。
您可以检查qdbus的PPID,以查看相关的konsole。