如何从Mac Automator应用程序启动.command脚本

时间:2019-11-05 19:26:08

标签: bash applescript automator

我正在尝试使用automator创建一个Mac“应用程序”,它基本上会调用.command文件来完成所有工作。该命令文件将与.app位于同一目录中,但我倒是第一个-获取单击以确定.command文件位置的.app文件的当前目录。

我尝试过

SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )"
echo "-- $SCRIPTPATH"

这只是回报我的用户主管-基本上〜 该应用程序本身位于桌面示例的目录中:〜/ Desktop / foo / my.app

我也尝试过

 here="`dirname \"$0\"`"
   echo "cd-ing to $here"
   cd "$here" || exit 1

都不起作用。

最终,我需要调用my.command来运行该命令,但需要知道其实际位置-甚至相对于该应用程序,这样它才会触发。目前,我收到一个错误消息,因为它不在我的用户帐户的根目录中,所以找不到my.command(因为我无法控制它在最终用户计算机上的放置位置)。

任何关于我可以做什么来解决这个问题的指针。

注意:要回答-为什么我要使用具有终端脚本的应用程序来调用本质上是脚本的.command-基本上是因为,如果以这种方式进行操作,终端实际上​​不会弹出。这个演示是我需要做的。

1 个答案:

答案 0 :(得分:0)

由于您没有包含另存为应用程序 Automator 工作流程的明确详细信息,因此,我以以下示例为例和 Automator 应用的使用方式,例如 my.app ,执行例如 my.command 脚本文件,该文件与例如 my.app 是。

在此示例中,我在台式机上创建了一个名为 foo 文件夹,其中 my.app < / strong>与 my.command 脚本文件一起保存。

自动化器 应用程序工作流程使用运行AppleScript 动作来实现目标。

使用以下示例 AppleScript 代码替换默认的 code

set myCommandFilename to "my.command"

set myAppPathAlias to path to me

tell application "System Events"
    set myDirName to POSIX path of container of myAppPathAlias
    set myCommandFilePathname to myDirName & "/" & myCommandFilename
    set myCommandFilenameExists to exists file myCommandFilePathname
end tell

if myCommandFilenameExists then
    try
        do shell script myCommandFilePathname's quoted form
    on error eStr number eNum
        display dialog eStr & " number " & eNum ¬
            buttons {"OK"} default button 1 ¬
            with title "File I/O Error..." with icon stop
    end try
else
    display dialog "A necessary file, ' " & myCommandFilePathname & ¬
        "', is missing!" buttons {"OK"} default button 1 ¬
        with title "Missing File..." with icon stop
end if
  • 注意:将my.command更改为实际的文件名示例 AppleScript 代码的其余部分无需修改。

Automator App

如果启动了 my.app ,并且 my.command 脚本文件不在同一文件夹中为 my.app ,则将显示错误消息,例如:

Missing File Error

如果启动了 my.app ,并且 my.command 脚本文件没有其可执行位 >设置,则将显示此错误消息,例如:

File  I/O Error

此外,如果 my.command 脚本文件没有正常退出,它也会显示错误消息,例如:

Dirty Exit

  • 错误消息的内容将根据例如 my.command 脚本文件,其编码方式以及失败方式。此示例是最坏的情况,因为它让您知道失败的原因,而不是失败的原因。

注意:示例 AppleScript 代码就是这样,并且不包含任何其他 error 适当处理。用户有责任添加适当的,需要的或想要的任何错误处理。看看try中的error 声明AppleScript Language Guide 声明。另请参见Working with Errors