我经常在工作时举办一些儿童节目。为此,我需要将屏幕扩展到电视,更改音频接收器等。并将 mplayer 窗口从主屏幕移动到所需的 + 使该窗口具有粘性。我知道如何做所有这些,而且我可以编写那个脚本。但要做到这一切,我需要刚刚执行的 MPlayer 的 PID。但是,如果我从 bash 脚本内部运行 MPlayer,就像mplayer ... &
我可以通过 PID一样,$!
但是当脚本结束时我失去了控制 mplayer 的能力。我知道通过选项执行 mplayer 的可能性-slave
,但我想以与正常启动 MPlayer 相同的方式控制它。
有谁知道如何在 bash 脚本中调用 MPlayer,能够获取它的 PID 并能够在脚本结束时通过正常的 MPlayer 控制台交互来控制 MPlayer?
我也对其他解决方案持开放态度,但基本上我需要先以某种方式启动 mplayer,然后获取它的 PID 以便能够运行 pacmd 和 wmctrl 命令,并且所有这些都不会改变已执行 mplayer 的行为。
下面的脚本执行以下过程:
/dev/null
,因此默认情况下没有进程(包括未来的子进程)使用原始进程。请注意/dev/tty
直接访问的进程(例如sudo
,要求输入密码)可能仍会干扰。mplayer
,标准输入重定向到原始标准输入。这样,它是唯一使用它的进程。命令行参数按原样传递。mplayer
退出。如果
mplayer
过早退出,则脚本将永远不会超过“等待正确的窗口”。因此,最好在后台的子外壳中执行几个步骤。退出时mplayer
,主脚本不应让子shell 存活。如果启用了作业控制,该脚本将出现异常行为,因此不要从具有作业控制的 shell 中获取它。如果有来源,它也可以
kill
超出您的预期。您应该将脚本作为独立的可执行文件运行。