如何运行一个shell脚本在OS X双击?

我有一个shell脚本,在OS X上有用户执行权限,但当我双击它时,它在文本编辑器中打开。如何通过双击它来运行它?

325975 次浏览
  • 首先在终端中输入以下命令使脚本可执行:

      chmod a+x yourscriptname
    
  • 然后,在Finder中,右键单击您的文件并选择“用”打开;然后是“其他……”。

  • 这里您选择了您希望文件执行到的应用程序,在这种情况下,它将是终端。为了能够选择终端,您需要从&;推荐应用程序&;到“所有申请”。(终端。应用程序可以在Utilities文件夹中找到)

  • 注意,除非您不想将所有与此扩展名关联的文件在终端中运行,否则您不应该使用“始终以…打开”;检查。

  • 单击OK后,您应该能够通过简单地双击它来执行脚本。

你试过使用.command扩展名吗?

或者,你可以使用鸭嘴兽从你的脚本创建一个常规的Mac OS X应用程序

无需使用Platypus等第三方应用。

只要用脚本编辑器创建一个Apple脚本,并使用命令do shell script "shell commands"来直接调用命令或可执行的shell脚本文件,将可编辑的脚本文件安全地保存在某个地方,然后导出它来创建应用程序脚本。应用程序脚本可以通过双击或选择栏文件夹启动。

由于OSX 10.10(约塞米蒂)和因为至少 OSX 10.8(山狮),当你打开(双击)可执行脚本从Finder时行为如下:

  • 可执行的脚本<一口> [1] 没有后缀后缀.command:
  • 默认为<强> < /执行强> - 不需要设置:
    • 打开一个终端窗口,脚本在其中运行。
    • 在脚本结束后默认情况下,窗口将保持open,这样你就可以检查输出(尽管那时运行脚本的shell已经退出并你不能再与交互)。
      然而,通过Terminal的Preferences... > Profiles,你可以选择在脚本退出时自动关闭窗口
  • 警告: 工作目录始终是当前用户的主文件夹,而不是脚本所在的文件夹。
    • 要对shell脚本所在的文件夹进行更改,请将
      • cd -- "$(dirname "$BASH_SOURCE")"就在shebang线之后
      • 或者,如果你必须保持posix兼容,cd -- "$(dirname "$0")"
      • 对于边缘情况,例如找到符号链接脚本的真正源目录,请参见这个答案
  • <李> 如果脚本意外可执行:
    • 通过在终端中运行chmod +x <script>使其可执行;否则,您将看到以下症状:
    • .command: Finder显示一个误导性的错误消息,表明问题可以通过File > Get Info修复,这不是真的-使用上面建议的chmod +x方法。
    • <李>没有后缀:
      • 一个shebang行(例如,#!/bin/bash):行为就好像后缀是.sh -见下文。
      • with 没有 shebang line:在默认文本编辑器(默认为TextEdit)中打开。
  • 带有后缀.sh的脚本,无论是否可执行:
  • TextEdit.app中的打开编辑,如果已经安装,则使用Xcode.app
  • 带有后缀.scpt.applescript的脚本(即使它们本身被标记为可执行的,但通常不是这样):
    • [Apple]Script Editor中的打开编辑
    • 请注意,JXA源代码文件似乎(目前)没有明显的后缀。
  • 带有一个custom后缀(系统尚未知道的后缀)的脚本,无论是否可执行(实际上适用于任何类型的文件):
    • < em > < / em >提示你让应用程序用当你 打开它们记住这个选择打开它们。

[1] 可执行的表示:设置了可执行权限位和调用用户(相对于文件的所有权)的脚本,因此潜在地允许执行它。
如果你使用chmod a+x来设置所有权限位(这是典型的),任何人可以调用它(假设它们也被允许基于权限位和文件的所有权来文件)

最简单的方法是将扩展名更改为.command或不扩展。

但这会打开终点站,你必须关闭终点站。如果你不想看到任何输出,你可以使用Automator创建一个Mac应用程序,你可以双击,添加到dock等。

  1. 打开Automator应用程序
  2. 选择“应用程序”类型
  3. 在Actions搜索框中输入“run”
  4. 双击“运行Shell脚本”
  5. 单击右上角的Run按钮来测试它。
  6. File > Save创建应用程序。

enter image description here

你也可以使用RCDefaultApp通过文件扩展名设置默认值:

http://www.rubicode.com/Software/RCDefaultApp/

潜在地,你可以设置.sh打开在iTerm/终端等,这需要用户执行权限,例如

chmod u+x filename.sh

RCDefaultApp pref pane

chmod 774 filename

请注意:带有bash脚本的名为'filename'的文件没有扩展名