如何等待 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
部分以替换变量。它奏效了。
我在 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
部分以替换变量。它奏效了。