macosx php页面调用shell,关于macos:如何通过双击在OS X中运行shell脚本?

本文指导如何使OSX上的shell脚本可执行,包括 chmod 命令设置、Finder中的打开方式选择终端、避免Finder默认文本编辑、以及如何使用.command扩展名和AppleScript。还讨论了不同脚本后缀和执行行为的细节。
摘要由CSDN通过智能技术生成

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

首先在终端中键入以下内容,使脚本可执行:

chmod a+x (yourscriptname)

然后,在Finder中,右键单击您的文件,选择"打开方式",然后选择"其他…"。

在这里,您可以选择要在其中执行文件的应用程序,在本例中,它是终端应用程序。要选择终端,您需要从"推荐应用程序"切换到"所有应用程序"。(可以在实用程序文件夹中找到terminal.app应用程序)

请注意,除非您不想将所有文件与要在终端中运行的扩展名相关联,否则不应选中"始终打开"。

单击"确定"后,您应该能够通过双击脚本来执行脚本。

谢谢,我知道了,我不知道要和终端联系,我想需要和/bin/sh联系。

我在列表中找不到terminal.app,直到我意识到我必须查看"实用程序"文件夹。希望这能节省一些时间。

在OSX 10.8及更高版本上,名称没有后缀或后缀.command的可执行脚本默认可从finder执行,无需指示finder如何打开它。

即使在我修改了它之后,这个应用程序也可能变成灰色。

"所有应用程序"是我所缺少的设置……可能也是Cheruvim所经历的。至于Glenn的评论:您可以简单地使用窗口右上角的内置搜索功能;确保您输入应用程序的全名,即terminal.app。

非常感谢您添加了有关如何使其与终端一起运行的详细信息。在搜索stackoverflow之前我浪费了30-40分钟:(

@mklement0,在OSX 10.12.5(Sierra,clean install)上,后缀为.command,我需要chmod a+x使脚本在finder中可执行,否则权限被拒绝(我有读写权限)。那是一个Miniconda3-latest-MacOSX-x86_64.sh,扩展名改为.command。

@帕特里克特:是的,这就是我为什么说(重点补充):"一个可执行的脚本……"。可执行意味着:设置了可执行位和调用用户(相对于文件的所有权)的脚本,因此可能允许调用它。如果您使用chmod a+x(这是典型的),任何人都可以调用它(假设还允许他们读取文件)。换句话说:我的评论不是关于chmod a+x,而是关于不需要告诉finder如何打开这些脚本。

这不是一个干净的方法。将脚本重命名为.command文件扩展名。

这是可行的,但它总是把我的终端窗口带到前面。如果不把终端窗口放在前面,有什么办法可以做到这一点吗?也许是让脚本从一开始就倒退的一种方法?

您是否尝试过使用.command文件扩展名?

这是通过在终端中打开脚本来实现的。谢谢。

这样更好。在@lus answer中,工作文件夹与打开脚本的文件夹不同。

有没有一种方法可以在没有控制台窗口的情况下启动"后台"任务?

请注意,当前目录可能不是脚本所在的目录。看看这个问题,把它设置正确:stackoverflow.com/questions/59895/…

您仍然需要有执行权限(chmod +x,但.command扩展已经与终端链接。很好的解决方案,谢谢

显然,用户不能用这种方法与终端程序交互-除非我弄错了?

@罗德里戈有没有办法阻止航站楼开放?

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

可执行脚本[1]无后缀或后缀.command:

默认情况下执行-不需要设置:

将打开一个新的终端窗口,脚本将在其中运行。

默认情况下,在脚本终止后,窗口将保持打开状态,以便您可以检查输出(尽管此时运行脚本的shell已退出,并且您不能再与它交互)。但是,通过终端的Preferences... > Profiles,您可以选择在脚本退出时自动关闭窗口。

警告:工作文件夹始终是当前用户的主文件夹,而不是脚本所在的文件夹。

要将shell脚本更改为其所在的文件夹,请将

在shebang线之后

或者,如果您必须保持POSIX兼容,则cd --"$(dirname"$0")"。

对于边缘情况,例如查找符号链接脚本的真正源目录,请参见我的这个答案。

如果脚本意外地不可执行:

通过在终端中运行chmod +x使其可执行;否则,您将看到以下症状:

.command:finder显示一条误导性错误消息,提示问题可以通过File > Get Info解决,这不是真的-使用上面建议的chmod +x方法。

无后缀:

使用shebang行(例如,#!/bin/bash):行为就像后缀是.sh-见下文。

没有shebang行:在默认文本编辑器(默认为textedit)中打开。

后缀为.sh的脚本,无论是否可执行:

在TextEdit.app中打开进行编辑,如果安装了Xcode.app则打开进行编辑。

后缀为.scpt或.applescript的脚本(即使它们本身标记为可执行文件,通常情况下不是这样):

在[Apple]Script Editor中打开编辑

注意,JXA源代码文件似乎没有明显的后缀(还没有)。

具有自定义后缀(系统尚不知道的后缀)的脚本,无论是否可执行(实际上,适用于任何类型的文件):

当你第一次打开应用程序时,提示你打开它们,记住这个选择。

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

当脚本使用一个简单的osascript退出时,可以关闭打开的终端窗口,您可以将其包含在.command文件中,而不是手动处理配置文件。

@I'L'I:你的意思是在脚本的末尾添加一个osascript -e '...'命令吗?具体的命令是什么?它是否确保即使脚本没有在最前面的选项卡中运行,也会关闭右选项卡?

@mklement0:是的,我已经有几分钟没有测试过了,但是基本的想法是在命令脚本的最后一行包括:osascript -e 'tell application"Terminal" to close front window' > /dev/null 2>&1 &…虽然最终的重定向确实是关键,但它可能在每个场景中都不起作用——否则,OSAScript可以很容易地进行调整(例如,如果这是终端默认行为,则可能需要将窗口更改为tab,等等)。

在运行.command脚本文件之后,是否可以不关闭终端窗口/选项卡(尽管配置文件设置如此)?

@cybermew:如果您可以修改脚本,则添加一个在末尾等待击键的命令;例如,如果是bash脚本,则添加read -p 'Press Return to close this window.'作为最后一条语句。

有没有办法让.command的窗户不关上?我的意思是我想创建一个.command文件,当执行该文件时,会打开一个带有预定义PATH变量的终端。

@罗伊:在你的.command文件中,首先根据需要设置PATH,然后调用bash(无需争论)来启动一个交互会话,以保持窗口打开。

@Royi:确保你的.command文件有一个有效的shebang行(例如,#!/bin/bash行);如果它仍然不起作用,请用mcve创建一个新问题(最小、完整和可验证的例子);一旦你这样做了,请在这里随意打我。

@mklement0,看看apple.stackexchange.com/questions/335608。谢谢您。

或者,可以使用platypus从脚本创建常规的mac os x应用程序

这是一个非常棒的应用程序。但我有点问题。我有一个要转换成.app文件的python脚本。我的脚本包括一行,用户必须在其中键入一些输入(raw_input()),当.app到达这行代码时,它会抛出一个eof(文件结尾)错误。我该怎么办?

它不是交互式终端。鸭嘴兽只提供脚本输出。没有双向通信。

或者使用run shell脚本操作创建带有automator的OS X应用程序。

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

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

打开Automator应用程序

选择"应用"类型

在"操作"搜索框中键入"运行"

双击"运行shell脚本"

点击右上角的Run按钮进行测试。

创建应用程序。

32069822ca49641923dd50df802316f3.png

伟大的!我们如何自动化这个工作流程,使之每天下午1点运行?

无需使用第三方应用程序,如鸭嘴兽。

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

更好的是,使用自动机并直接使用run shell脚本操作,而不是通过Apple脚本。

还可以使用rcdefaultapp按文件扩展名设置默认值:

http://www.rubicode.com/software/rcdefaultapp/

您可能会将.sh设置为在iterm/terminal等中打开。它需要用户执行权限,例如

chmod u+x filename.sh

34d56f047e1a45a46828760a59e87093.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值