通过终端打开已经运行的程序

Kun*_*nok 10 command-line

如何使用终端切换到已经运行的程序?

例如:

firefox 打开新的 Firefox 窗口。

是否有一个命令可以聚焦已经打开的 Firefox 窗口?

Jac*_*ijm 14

作为单线

假设你已经安装了wmctrlsudo apt-get install wmctrl如果没有就运行):

命令:

wmctrl -ia "$(wmctrl -lp | grep "$(pgrep gedit)" | tail -1 | awk '{ print $1 }')"
Run Code Online (Sandbox Code Playgroud)

将升起最后打开的gedit窗口。用任何其他应用程序替换它。

解释

pgrep gedit
Run Code Online (Sandbox Code Playgroud)

获取 gedit 的 pid

wmctrl -lp
Run Code Online (Sandbox Code Playgroud)

列出所有窗口和它们所属的 pid

awk '{ print $1 }'
Run Code Online (Sandbox Code Playgroud)

拆分 window-id(行中的第一个字符串)

$(wmctrl -lp | grep "$(pgrep gedit)" | tail -1 | awk '{ print $1 }')
Run Code Online (Sandbox Code Playgroud)

因此找到最后创建的窗口的窗口 ID gedit(输出wmctrl -lp按创建的时间顺序列出窗口,如果应用程序有多个窗口,则tail -1返回最后一个)。

wmctrl -ia
Run Code Online (Sandbox Code Playgroud)

随后通过其升起窗户 window-id

在一个小脚本中

...以应用程序作为参数运行:

wmctrl -ia "$(wmctrl -lp | grep "$(pgrep gedit)" | tail -1 | awk '{ print $1 }')"
Run Code Online (Sandbox Code Playgroud)

备择方案?

理论上的命令:

xdotool search --class gedit windowactivate
Run Code Online (Sandbox Code Playgroud)

应该做(某种)同样的事情;在这种情况下,它应该提高第一个找到的窗口gedit
然而,它似乎不那么健壮。在我的系统 (Unity) 上,它什么也没做。