Mac OS X:从命令行启动GUI应用程序时将其带到前台

4
有没有办法在Mac OS X终端中启动GUI应用程序时将其带到前台?如果我运行以下命令:
/Applications/TextEdit.app/Contents/MacOS/TextEdit

在终端中,TextEdit会在后台打开。如果你正在开发GUI应用程序并使用“make && ./run”,这会非常烦人。

3个回答

6
似乎还有更短的变体: > open -a TextEdit

谢谢!比起这个命令要好得多:open "$(mdfind Minecraft.app | grep Minecraft.app | tail -1)" - Bruno Bronosky

6

至少对于TextEdit和类似的GUI应用程序,open命令可行:

> open /Applications/TextEdit.app

1
谢谢!我之前尝试过使用 open 命令,但没有意识到我也可以打开整个包。如果你使用 open /Applications/TextEdit.app/Contents/MacOS/TextEdit 命令,会启动一个新的终端窗口,并将程序放到后台运行。 - jnsg
1
@jnsg,我从未想过使用可执行路径来打开open。这是有趣的行为。不过这很有道理:如果你从Finder中打开一个可执行文件,它将在终端中运行。 - Chris Page
有没有一种方式可以使用 open 或其他命令,使应用程序进入前台且在应用程序启动后不退出? - Spencer Williams
现在,如果它能够继承子进程的标准输出/错误输出流,那么我就可以使用它从Node.js生成前台进程并捕获输出。 - Myk Melez
@SpencerWilliams 我刚刚发布了一个答案,可以完成你所要求的。 - jviotti

0
此帖子中描述的答案使用具有默认选项的open(1)。这有两个限制,在您的用例中可能很重要:
  • open作为分离的进程运行应用程序包
  • open不会将标准I/O管道返回到您的脚本/ shell

为了解决这些问题:

  • open采用-W选项,以等待应用程序退出的打开方式
  • open采用--stdout--stderr选项,您可以将它们管道连接到您的shell(或脚本)TTY。

例如:

open -W --stdout $(tty) --stderr $(tty) <path/to/Bundle.app>

我在这里写了更多关于这个的内容:https://www.jviotti.com/2022/11/28/launching-macos-applications-from-the-command-line.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接