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


10

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

例如:

firefox 打开新的Firefox窗口。

是否有一个命令将聚焦已打开的firefox窗口?


1
根据公认的答案,我认为您想关注现有窗口,而不是打开新窗口。我已经提交了一个编辑以进行澄清,但是它正在等待审查。
jpaugh

Answers:


14

作为一个班轮

假设您已安装wmctrlsudo apt-get install wmctrl如果未运行,则运行):

命令:

wmctrl -ia "$(wmctrl -lp | grep "$(pgrep gedit)" | tail -1 | awk '{ print $1 }')"

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

说明

pgrep gedit

获得gedit的pid

wmctrl -lp

列出所有窗口及其所属的pid

awk '{ print $1 }'

分割window-id(该行的第一个字符串)

$(wmctrl -lp | grep "$(pgrep gedit)" | tail -1 | awk '{ print $1 }')

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

wmctrl -ia

随后通过其升高窗口 window-id

在一个小脚本中

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

#!/bin/bash

wmctrl -ia "$(wmctrl -lp | grep "$(pgrep "$1")" | tail -1 | awk '{ print $1 }')"
  • 将其另存为一个空文件 switchto.sh
  • 使它可执行
  • 运行为(例如)

    /path/to/switchto.sh firefox
    

备择方案?

理论上,命令:

xdotool search --class gedit windowactivate

应该做(类似);在这种情况下,它应该引发第一个找到的窗口gedit
但是,它似乎不那么健壮。在我的系统(Unity)上,它什么也没做。


1

如果您使用过运行过Firefox firefox &,则可以使用它jobs来查看其编号。为了把它带到前台写%n firefoxn代表了它的编号。例:

sabrina@ubuntu:~$ jobs
[1]+ Stopped      firefox
sabrina@ubuntu:~$ fg %1

您也可以“杀死”程序:

sabrina@ubuntu:~$ kill %1
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.