Mac OS X 登录项没有终端窗口?

Mac OS X 登录项没有终端窗口?

我想/Users/me/dir/executable在每次登录时运行。

你可以将可执行文件视为文本文件具有可执行权限并包含如下内容:javaws http://some/url

上一句话可能是答案的关键。执行诸如 chrome 之类的程序不会留下终端窗口,但执行文本文件会留下。

我已经配置了一个指向该可执行文本文件的登录项,并且我选中了隐藏复选框(不确定它的作用是什么)。

现在,每次我登录时,都会有一个与此登录项关联的终端窗口。窗口显示

Last login: (timestamp)
/Users/me/dir/executable ; exit;
machine:~ me$ /Users/me/dir/executable ; exit;
logout

[Process completed]

我知道我需要取消选中,Reopen windows when logging back in这样才能防止这些窗口随着时间的推移而累积。但我想完全隐藏/消除该窗口。

我怎样才能获得一个不留下终端窗口的登录项?

注意:我考虑过使用 launchd。但是我想要运行的东西有/想要一个 UI,所以我不想让它在后台隐藏运行。

答案1

  1. 创建单行 AppleScript:
    do shell script "/Users/me/dir/executable"

  2. 另存为应用程序“MyScript.app”(无启动屏幕)

  3. 将 MyScript.app 添加到登录项。

原始发帖者实际上创建了一个 shell 脚本文件。如果将其添加到登录项中,OS X 启动服务将打开终端应用程序来处理脚本。这将打开一个终端窗口,正如 OP 所解释的那样。终端的默认行为是在 shell 退出时保持 Shell 窗口打开。这可以作为全局终端首选项进行更改,但这可能不是理想的选择,即使您这样做,终端应用程序仍将保持打开状态。

AppleScript 中的“执行 shell 脚本”命令会打开一个静默 shell 进程,将任何输出返回给 AppleScript 并关闭 shell。保存为可执行应用程序的 AppleScript 会静默运行并退出(除非您通过对话框等指定用户交互)。两步解决方案可能看起来很笨拙,但除了费力设置启动进程外,我不知道还有其他方法。

launchd 也可以工作,因为 launchd 可以生成具有 UI 的进程。

相关内容