Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何要求Cocoa应用程序从终端运行操作,然后返回结果_Bash_Macos_Cocoa_Xpc - Fatal编程技术网

Bash 如何要求Cocoa应用程序从终端运行操作,然后返回结果

Bash 如何要求Cocoa应用程序从终端运行操作,然后返回结果,bash,macos,cocoa,xpc,Bash,Macos,Cocoa,Xpc,我的Cocoa MacOS应用程序有一个修改磁盘中某些文件的操作。 我想使这些操作可以从终端运行 例如,如果我运行: $ echo `myApp runAction` 这将打开应用程序,执行一些与“runAction”关联的代码,然后将结果打印到控制台 不幸的是,我不能仅仅制作一个命令行工具,因为它的局限性(不能包括动态框架) 有什么建议吗?你应该让你的应用程序可以用Apple Script编写脚本。通过以下方式,您可以在bash(或zsh)中对应用程序“说话”,无论它是否正在运行: osas

我的Cocoa MacOS应用程序有一个修改磁盘中某些文件的操作。 我想使这些操作可以从终端运行

例如,如果我运行:

$ echo `myApp runAction`
这将打开应用程序,执行一些与“runAction”关联的代码,然后将结果打印到控制台

不幸的是,我不能仅仅制作一个命令行工具,因为它的局限性(不能包括动态框架)


有什么建议吗?

你应该让你的应用程序可以用Apple Script编写脚本。通过以下方式,您可以在bash(或zsh)中对应用程序“说话”,无论它是否正在运行:

osascript-e'告诉应用程序“myApp”运行操作'

或者通过脚本编辑器应用程序中编写的AppleScript脚本

当应用程序未运行时,它将首先启动

web上有一些示例/文档足以执行基本任务,如执行命令并返回结果:

在我的例子中,这些文档对于复杂的任务(如向命令传递参数)是不够的,但是对于简单的任务(如:

osascript-e'告诉应用程序“myApp”登录'

osascript-e'告诉应用程序“myApp”注销'

-如果操作因某种原因失败或成功,myApp将返回文本“0”或“1”-

成功了。 osascript-e“告诉应用程序“我的应用程序”退出”甚至是免费的

问候,,
Robert

你应该让你的应用程序可以用Apple脚本编写脚本。通过以下方式,您可以在bash(或zsh)中对应用程序“说话”,无论它是否正在运行:

osascript-e'告诉应用程序“myApp”运行操作'

或者通过脚本编辑器应用程序中编写的AppleScript脚本

当应用程序未运行时,它将首先启动

web上有一些示例/文档足以执行基本任务,如执行命令并返回结果:

在我的例子中,这些文档对于复杂的任务(如向命令传递参数)是不够的,但是对于简单的任务(如:

osascript-e'告诉应用程序“myApp”登录'

osascript-e'告诉应用程序“myApp”注销'

-如果操作因某种原因失败或成功,myApp将返回文本“0”或“1”-

成功了。 osascript-e“告诉应用程序“我的应用程序”退出”甚至是免费的

问候,,
Robert

即使您的应用程序是一个.app包,它的可执行文件仍然是您在命令行工具中获得的相同类型的二进制文件

您可以在终端中执行它,传递参数,打印输出。例如

$./MyApplication.app/Contents/MacOS/MyApplication——一些参数


根据你的应用程序的用途,它可能不是完美的解决方案,但它是一种完全有效的使用方式

即使您的应用程序是一个.app包,其可执行文件仍然是您在命令行工具中获得的相同类型的二进制文件

您可以在终端中执行它,传递参数,打印输出。例如

$./MyApplication.app/Contents/MacOS/MyApplication——一些参数


根据你的应用程序的用途,它可能不是完美的解决方案,但它是一种完全有效的使用方式

谢谢罗伯特,我不知道苹果的脚本。我不知道这是不是唯一的办法。XPS服务是实现这一点的另一种方式吗?使用XPC,您需要编写一个命令行客户端,通过XPC将命令发送到您的应用程序。但当应用程序不运行时,客户端将失败。客户机必须在bash中有用的路径中(或者您将客户端捆绑到应用程序捆绑包中,并使用该二进制文件的绝对路径。总之,编写helper客户端需要更多的工作。就我的两个cts。Robert,我尝试将基本脚本添加到我的应用程序中。它按预期工作,因此谢谢。困扰我的一件事是,我第一次尝试运行脚本时,MacOS会提示我他提醒授予“应用程序X控制应用程序Y”。当我单击“不允许”时,重新启用它的唯一方法是转到“系统首选项”应用程序-有点meh。真的没有其他方法可以做到这一点吗?对不起,没有-这是macOS的安全功能。一旦允许脚本控制应用程序,你就再也不会烦恼了。唯一可以撤消决定(并恢复对话框)的方法是为所有应用程序重置此决定。有一个cli命令我不记得了,因为我从未使用过。感谢Robert,我不知道Apple Script。我想知道这是否是唯一的方法。XPS服务是否是实现此目标的另一种方法?使用XPC,您需要编写一个发送命令的命令行客户端但是当应用程序没有运行时,客户端将失败。客户端必须在路径中才能在bash中使用(或者您将客户端捆绑到应用程序捆绑包中,并使用该二进制文件的绝对路径。总之,编写helper客户端需要更多的工作。就我的两个cts。Robert,我尝试将基本脚本添加到我的应用程序中。它按预期工作,因此谢谢。困扰我的一件事是,我第一次尝试运行脚本时,MacOS会提示我他提醒授予“应用程序X控制应用程序Y”。当我单击“不允许”时,重新启用它的唯一方法是转到“系统首选项”应用程序-有点meh。真的没有其他方法可以做到这一点吗?对不起,没有-这是macOS的安全功能。一旦允许脚本控制应用程序,你就再也不会烦恼了。唯一可以撤消决定(并恢复对话框)的方法是为所有应用程序重置此决定。有一个cli命令我不记得了,因为我从未使用过。这很有趣。但有没有办法在这种方法中返回一些值?另外,我希望命令行等待我的应用程序完成任务。@msmiako如果要创建命令行实用程序,请t以相同的方式打开应用程序包。即使用
打印
输出文本或使用
退出
t