如何通过双击在OS X中运行一个shell脚本?
我有一个在OS X上有用户执行权限的shell脚本,但是当我双击它时,它会在文本编辑器中打开。 我怎样才能通过双击运行它?
-
首先在terminal中input以下命令来执行脚本:
chmod a+x (yourscriptname)
-
然后,在Finder中,右键单击您的文件并select“打开方式”,然后select“其他…”。
-
在这里你select你想要执行文件的应用程序,在这种情况下,它将是terminal。 为了能够selectterminal,您需要从“推荐的应用程序”切换到“所有应用程序”。 (Terminal.app应用程序可以在Utilities文件夹中find)
-
请注意,除非您不想将所有带有此扩展名的文件关联到terminal,否则您不应该选中“始终打开”。
- 点击确定后,只需双击它即可执行脚本。
你有没有尝试过使用.command
文件扩展名?
从OSX 10.10 (优胜美地)开始,至less OS X 10.8 (Mountain Lion) , 从Finder打开(双击) 可执行脚本时,其行为如下所示:
- 带有NO后缀或后缀的 可执行脚本[1]
.command
:- 是默认执行的 – 不需要安装 :
- 将打开一个新的“terminal”窗口,其中运行脚本。
- 默认情况下,脚本终止后窗口将保持打开状态 ,以便检查输出 (尽pipe此时运行脚本的shell已经退出,并且不能再与其进行交互 )。
但是,通过terminal的Preferences... > Profiles
您可以select在脚本退出时自动closures窗口。
- 警告 : 工作文件夹总是当前用户的主文件夹 ,而不是脚本所在的文件夹。
- 要将shell脚本更改为它所在的文件夹,请放置
-
cd -- "$(dirname "$BASH_SOURCE")"
在shebang行之后 - 或者,如果您必须保持POSIX兼容,
cd -- "$(dirname "$0")"
。 - 对于边缘情况,例如查找符号链接脚本的真实源代码目录,请参阅我的答案 。
-
- 要将shell脚本更改为它所在的文件夹,请放置
- 如果脚本意外不可执行 :
- 通过在terminal中运行
chmod +x <script>
使其可执行。 否则,您将看到以下症状: -
.command
:Finder会显示一个误导性的错误信息,表明可以通过File > Get Info
修复问题,这不是真的 – 使用上面提到的chmod +x
方法。 - 没有后缀:
- (例如
#!/bin/bash
):行为就好像后缀是.sh
见下文。 - 没有 shebang行:打开默认的文本编辑器(默认情况下是TextEdit)。
- (例如
- 通过在terminal中运行
- 是默认执行的 – 不需要安装 :
- 具有后缀
.sh
脚本,无论是否可执行:- 在
TextEdit.app
中打开进行编辑 ,如果安装了Xcode.app
,也可以进行Xcode.app
。
- 在
- 具有后缀
.scpt
或.applescript
脚本(即使它们本身被标记为可执行文件,通常情况下也是如此):- 在
[Apple]Script Editor
打开进行编辑 - 请注意, JXA源代码文件似乎没有明确的后缀(还)。
- 在
- 具有自定义后缀的脚本(系统还不知道的后缀),无论是否可执行(实际上,适用于任何types的文件):
- 提示您 在第一次打开应用程序时打开它们 ,并记住该选项 。
[1] 可执行的意思是:一个脚本的可执行权限位被设置,调用用户 – 相对于文件的所有权 – 因此可能被允许执行它。
如果您使用chmod a+x
来设置所有权限位(这是典型的), 任何人都可以调用它(假设它们也被允许根据读权限位和文件所有权来读取文件)。
或者,您可以使用Platypus从您的脚本创build一个常规的Mac OS X应用程序
无需使用鸭嘴兽等第三方应用程序。
只需使用脚本编辑器创build一个Apple脚本,然后使用命令do shell script "shell commands"
进行直接命令调用或执行shell脚本文件,将可编辑脚本文件保存在某处,然后将其导出以创build应用程序脚本。 应用程序脚本可以通过双击或在文件夹中select启动。
简单的方法是将扩展名更改为.command
或不扩展。
但是,这将打开terminal,你将不得不closures它。 如果您不想看到任何输出,可以使用Automator创build一个Mac应用程序,您可以双击,添加到扩展坞等。
- 打开
Automator
应用程序 - select“应用程序”types
- 在“操作”search框中input“运行”
- 双击“运行Shell脚本”
- 点击右上angular的
Run
button进行testing。 -
File > Save
以创build应用程序。
如果你给你的脚本一个.command
扩展名,并在其上执行一个chmod 777
(使其可执行),它将在双击时在terminal中打开并运行。 src: https : //discussions.apple.com/thread/2599189
有些人在评论中发布了其他答案:
复制您的脚本,然后将重复的脚本保存为应用程序。
现在该应用程序将在双击时运行。
我将更新这个答案,因为我保存为应用程序的文件已经被赋予了chmod权限,待定testing将validation是否需要。
提供了导致这个答案的解决scheme: http : //alvinalexander.com/blog/post/mac-os-x/applescript-save-script-as-application