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

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

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

例如:

firefox打开新的 Firefox 窗口。

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

答案1

一句话

假设你有控制端已安装(sudo 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 }'

分离窗口 ID(行中的第一个字符串)

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

因此找到最后创建的窗口的 window-id gedit(的输出wmctrl -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)上,它什么也没做。

答案2

如果您使用 Firefox 运行,firefox &则可以使用jobs查看其编号。要将其置于前台,请输入%n firefox代表n其编号的 。例如:

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

你也可以“杀死”该程序:

sabrina@ubuntu:~$ kill %1

答案3

这只是对 Jacob 的出色回答的改进。我刚刚使用了条件语句。另外,我在使用时遇到了奇怪的行为$1,所以我只是硬编码了一个程序。在我的例子中,dolphin我只想运行文件管理器实例:

#!/bin/bash
RUNONCE=dolphin
if (ps -e | grep -w $RUNONCE) ;
then wmctrl -ia "$(wmctrl -lp | grep "$(pgrep "$RUNONCE")" | tail -1 | awk '{ print $RUNONCE }')";
else $RUNONCE
fi;

相关内容