![通过终端打开已经运行的程序](https://linux22.com/image/884053/%E9%80%9A%E8%BF%87%E7%BB%88%E7%AB%AF%E6%89%93%E5%BC%80%E5%B7%B2%E7%BB%8F%E8%BF%90%E8%A1%8C%E7%9A%84%E7%A8%8B%E5%BA%8F.png)
如何使用终端切换到已经运行的程序?
例如:
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;