如何通过双击在OS X中运行shell脚本?

c2h*_*2h2 219 macos shell scripting desktop

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

Lus*_*Lus 253

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

    chmod a+x (yourscriptname)
    
    Run Code Online (Sandbox Code Playgroud)
  • 然后,在Finder中,右键单击您的文件并选择"打开方式",然后选择"其他...".

  • 在这里,您可以选择要将文件执行的应用程序,在这种情况下,它将是终端.为了能够选择终端,您需要从"推荐应用程序"切换到"所有应用程序".(可以在Utilities文件夹中找到Terminal.app应用程序)

  • 请注意,除非您不想将具有此扩展名的所有文件与终端中运行相关联,否则您不应选中"始终打开方式".

  • 单击"确定"后,您只需双击即可执行脚本.

  • 在OSX 10.8及更高版本中,名称具有_no_后缀或后缀`.command`的可执行脚本是_by default_可从Finder执行,而无需指示Finder如何打开它. (26认同)
  • 我在列表中找不到*Terminal.app*,直到我意识到我必须查看"Utilities"文件夹.希望这会节省一些时间. (21认同)
  • 不是干净的方法。将脚本重命名为`.command`文件扩展名。 (3认同)

Hag*_*lin 216

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

  • 您仍然需要具有执行权限(`chmod + x`),但`.command`扩展名已经与Terminal相关联.很好的解决方案,谢谢 (13认同)
  • 有没有办法在没有控制台窗口的情况下启动"后台"任务? (6认同)
  • 请注意,当前目录可能不是您的脚本所在的目录.请查看此问题以将其设置正确:http://stackoverflow.com/questions/59895/can-a-bash-script-tell-what -directory-其存储式 (6认同)
  • 这通过打开终端中的脚本来工作.谢谢. (3认同)
  • 这个更好.在@Lus回答中,工作文件夹与打开脚本的方式不同. (3认同)

mkl*_*nt0 142

从OSX 10.10(Yosemite)开始,至少从 OS X 10.8(Mountain Lion)开始,当您从Finder 打开(双击)可执行脚本时,行为如下:

  • 带有NO后缀后缀的可执行脚本[1]: .command
    • 正在执行默认- 无需安装:
      • 将打开一个新的终端窗口,其中运行脚本.
      • 默认情况下,窗口仍将打开脚本终止后,这样你就可以检查输出(虽然在这一点上运行该脚本外壳已退出和您不能交互使用任何更长).
        但是,通过终端,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- 见下文.
        • 没有家当线:在默认的文本编辑器(默认情况下为文本编辑)打开.
  • 后缀的.sh脚本,无论是否可执行:
    • 打开的编辑TextEdit.app,或者,如果安装了,用Xcode.app.
  • 带有后缀的.scpt脚本或.applescript(即使它们自己被标记为可执行文件,通常情况并非如此):
    • 打开编辑[Apple]Script Editor
    • 请注意,JXA源代码文件似乎没有明显的后缀(尚未).
  • 与脚本一个自定义的后缀(后缀还不知道系统),无论是可执行文件或没有(其实适用于任何类型的文件):
    • 提示让应用程序在您第一次打开它们时打开它们,并记住该选择.

[1] 可执行意味着:设置了可执行权限位的脚本和调用用户 - 相对于文件的所有权 - 因此可能允许执行它.
如果使用chmod a+x设置的所有权限位(这是典型的),任何人都可以调用它(假设他们也被允许阅读基础上的文件读取权限位(S)和文件的所有权).

  • @ mklement0:是的,我没有测试它超过几分钟,但基本的想法是包含在**.命令**脚本的最后一行:`osascript -e'告诉应用程序"终端"关闭前窗'>/dev/null 2>&1&`...它可能在每个场景中都不起作用,虽然最后的重定向确实是关键 - 否则osascript可以轻松调整(例如**窗口**可能需要更改为**标签**,如果这是您的终端默认行为等). (5认同)
  • 尽管有配置文件设置,是否可以在运行“.command”脚本文件后不让终端窗口/选项卡关闭? (2认同)

svt*_*vth 38

或者,您可以使用Platypus从脚本创建常规Mac OS X应用程序

  • 或者使用Run Shell Script操作使用Automator创建OS X应用程序. (4认同)

wis*_*cky 12

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

但这将打开终端,你将不得不关闭它.如果您不想看到任何输出,可以使用Automator创建一个可以双击,添加到扩展坞等的Mac应用程序.

  1. 打开Automator申请
  2. 选择"应用程序"类型
  3. 在"操作"搜索框中键入"run"
  4. 双击"运行Shell脚本"
  5. 单击右上角的Run按钮进行测试.
  6. File > Save 创建应用程序.

在此输入图像描述


Luc*_*ier 8

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

只需使用脚本编辑器创建Apple脚本,并使用命令do shell script "shell commands"进行直接命令调用或可执行shell脚本文件,将可编辑脚本文件保存在某处,然后将其导出以创建应用程序脚本.通过在bar文件夹中双击或选择,可以启动应用程序脚本.

  • 更好的是,使用Automator并直接使用Run Shell Script操作,而不是通过Apple Script. (3认同)