我有一个在OS X上具有用户执行权限的Shell脚本,但当我双击它时,它会在文本编辑器中打开。如何才能让我通过双击来运行它?
首先在终端中输入以下命令,使脚本可执行:
chmod a+x yourscriptname
然后,在Finder中,右键单击您的文件,选择“打开方式”,然后选择“其他...”。
在此处,您可以选择要将文件执行到的应用程序,在本例中为Terminal。要选择终端,您需要从“推荐应用程序”切换到“所有应用程序”。 (Terminal.app应用程序可以在实用程序文件夹中找到)
请注意,除非您不想将所有具有此扩展名的文件关联到终端中运行,否则不应选中“始终使用此应用程序打开”。
单击“确定”后,您应该能够通过双击脚本来执行它。你尝试过使用.command
文件扩展名吗?
chmod +x
),但 .command
扩展名已经与 Terminal 相关联。非常好的解决方案,谢谢。 - NorTicUs自OSX 10.10(Yosemite)以来,并且至少从OS X 10.8(Mountain Lion)开始,当您从Finder打开(双击)可执行脚本时的行为如下:
具有无后缀或后缀为.command
的可执行脚本[1]:
默认情况下无需设置即可执行:
首选项... > 配置文件
,您可以选择在脚本退出时自动关闭窗口。注意:工作目录始终是当前用户的主目录,而不是脚本所在的文件夹。
cd -- "$(dirname "$BASH_SOURCE")"
放在 shebang 行之后cd -- "$(dirname "$0")"
。如果脚本意外地不可执行:
在终端中运行chmod +x <script>
使其可执行;否则,您将看到以下症状:
.command
:Finder 显示一个误导性的错误消息,建议通过文件 > 获取信息
来解决问题,这是不正确的 - 使用上面建议的chmod +x
方法。
无后缀:
#!/bin/bash
):行为就像后缀为.sh
一样-请参见下文。具有后缀.sh
的脚本,无论是否可执行:
TextEdit.app
或(如果已安装)Xcode.app
中打开以进行编辑。具有后缀.scpt
或.applescript
的脚本(即使它们本身被标记为可执行,这通常不是情况):
具有自定义后缀的脚本(系统尚未知道的后缀),无论是否可执行(实际上适用于任何类型的文件):
[1] 可执行文件 意味着:一个带有可执行权限位并且调用用户相对于文件所有权而言可能被允许执行的脚本。
如果您使用 chmod a+x
来设置所有权限位(这是典型的),任何人都可以调用它(假设他们也根据读取权限位和文件所有权被允许读取该文件)。
.command
文件中包含简单的osascript
代码而不是手动更改配置文件来关闭脚本退出时打开的终端窗口。 - l'L'losascript -e '...'
命令吗?具体的命令是什么,它是否确保即使脚本不在最前面的选项卡中运行,也能关闭正确的选项卡? - mklement0osascript -e 'tell application "Terminal" to close front window' > /dev/null 2>&1 &
...它可能不适用于所有情况,尽管最后的重定向是关键,否则 osascript 可以很容易地进行调整(例如,如果你的终端默认行为是选项卡,则 window 可能需要更改为 tab)。 - l'L'l.command
脚本文件后不让终端窗口/选项卡关闭? - CyberMew或者,您可以使用Platypus从脚本创建Mac OS X应用程序。
只需在Script Editor中创建Apple Script,并使用命令do shell script "shell commands"
进行直接命令调用或可执行的shell脚本文件,将可编辑的脚本文件安全保存在某个地方,然后导出它以创建一个应用程序脚本。该应用程序脚本可以通过双击或选择栏文件夹中的选项来启动。
你也可以使用RCDefaultApp按文件扩展名设置默认值:
http://www.rubicode.com/Software/RCDefaultApp/
潜在地,您可以将.sh 设置为在 iTerm/Terminal 等中打开。它需要用户执行权限,例如:chmod u+x filename.sh
chmod 774 filename
注意:文件名为“filename”的bash脚本文件没有扩展名。
.command
为后缀名的可执行脚本,在Finder中默认情况下可以直接运行,无需指示Finder如何打开它。 - mklement0