在 OS X 上运行 Shell 脚本而不出现终端窗口?

在 OS X 上运行 Shell 脚本而不出现终端窗口?

我正在尝试设置一些键盘快捷键来打开特定的 iTerm 会话,我可以使用 BetterTouchTool 和一些 AppleScript magic 来实现。问题是 OS X 坚持为您通过 GUI 执行的任何 shell 脚本打开终端窗口(即从 Finder 执行,或作为 BetterTouchTool 的键盘快捷键)。如果我直接从另一个终端运行脚本,则不会出现终端窗口。

我发现的一个解决方法是将脚本包装在 .app 目录中,这解决了多余终端窗口的问题,但也存在其他一些问题(例如,OS X 似乎将每个生成的 iTerm 窗口视为一个单独的应用程序,使我的 dock 变得混乱)。(编辑:这种行为实际上是由我的脚本中的一个错误引起的,见下文)

我还尝试在 Spaces 设置中将终端应用程序分配给另一个虚拟桌面,以尝试将其移出视线,但它会在运行脚本之前先切换到该桌面。

有没有办法完全禁用此行为?我已经在终端首选项中找到了在脚本完成后关闭窗口的设置,但终端窗口弹出一秒钟仍然很烦人。

答案1

打开自动机, 选择应用,添加运行 Shell 脚本行动和输入你的 Shell 命令引号之间(如果您有文件,您可以直接拖放它)。

除了玩它,现在你还可以节省它(作为任何地方的应用程序)甚至设置图标

答案2

这是一个几乎不费吹灰之力的快速而粗糙的示例(针对名为“myapp”的应用程序):

  1. 建立部分应用程序层次结构:

        mkdir -p ./myapp.app/Contents/MacOS
    
  2. 确保脚本的第一行包含所需程序的完整路径,例如,

    #!/bin/bash
    
  3. 将您的 shell 脚本命名为“myapp”(无引号、无扩展名),授予其执行权限,然后将其放在 MacOS 子目录中。要授予其执行权限:

    chmod ugo+x myapp
    
  4. 转到 Contents 子目录并创建一个包含以下字符串的 PkgInfo 文件:APPL???? [字符串末尾没有行终止符!] 使用 cat(1) 实用程序创建该文件:

    cat > PkgInfo
    APPL????
    

    键入字符串后(不要按回车键!),输入两个 control-D,这将关闭
    没有行终止符的文件并返回到 shell 提示符。)

  5. 从 Finder 中双击您的新“应用程序”。它将在无窗口的情况下运行。

答案3

你可能想看看鸭嘴兽,它从 shell 脚本和其他解释脚本创建 Mac OS X 应用程序。

答案4

如果您添加键LSUIElement并将其设置1Info.plist应用程序,它将不会在 Dock 中创建图标。

下面是Info.plist我的小型 shell 脚本应用程序:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleExecutable</key>
    <string>launch</string>
    <key>CFBundleIconFile</key>
    <string>launch</string>
    <key>LSUIElement</key>
    <string>1</string>
</dict>
</plist>

相关内容