如何等待 shell 脚本完成?

How can I wait for a shell script to complete?

我在 AppleScript 中使用命令行应用程序,我需要脚本等待进程完成 运行ning 才能继续。 (是的,我希望打开终端并查看应用 运行。)

我写了这段代码,基于an existing question:

activate application "Terminal"
tell application "System Events"
    repeat until visible of process "Terminal" is true
    end repeat
end tell

tell application "System Events" to keystroke "app_name option"
tell application "System Events" to keystroke return
        
delay 2
        
    set thePID to do shell script "app_name option > /dev/null 2>&1 & echo $!"
        
    repeat
        do shell script "ps ax | grep " & thePID & " | grep -v grep | awk '{ print  }'"
        if result is "" then exit repeat
        delay 2
    end repeat

-- more code...

除了我需要它等待命令行应用程序完成的部分外,我的脚本中的一切都正常。

我怎样才能完成这项工作?以set thePID开头的部分到底是做什么的?

为了让它正常工作,我删除了:

set thePID to do shell script "app_name option > /dev/null 2>&1 & echo $!"

然后在repeat下我改成:

do shell script "ps ax | grep " & thePID & " | grep -v grep | awk '{ print  }'"

至:

do shell script "ps ax | grep app_name | grep -v grep | awk '{ print  }'"

现在我的脚本可以正常运行了!

问题是我在脚本中通过击键调用应用程序,然后基本上 运行通过 运行ning set thePID to do shell script "app_name option > /dev/null 2>&1 & echo $!" 来调用它的一个单独实例。

我假设答案可能类似于 tell application "System Events" to keystroke "app_name option > /dev/null 2>&1 & echo $!"

我正在 运行 使用该程序的第二个实例,因为我不清楚如何正确使用我链接到的旧 post 中给出的示例。

所以我四处寻找如何在终端中获取 运行ning 程序的 PID,我发现 grep app_name 是拼图的一个常见部分。与 ps -ax...

相同

所以我按照自己的假设,再次删除了调用程序的变量 运行,并简单地将程序的名称插入字符串的 grep 部分以替换变量。它奏效了。