App脚本返回do脚本的值

时间:2014-09-08 13:12:07

标签: applescript

从do shell脚本获取返回值时,我遇到类型问题。

我正在检查是否仍在运行rsync的unix进程

repeat until (do shell script "/bin/ps -ef  | /usr/bin/grep -c [r]sync") > 0
        delay 120
end repeat
tell application "Terminal" to quit

回来的价值是正确的: - > “4”,但剧本直接退出。 我不知道如何设置正确的类型,我已经尝试过:

repeat until (do shell script "/bin/ps -ef  | /usr/bin/grep -c [r]sync") > "0"

但结果是一样的。

2 个答案:

答案 0 :(得分:0)

你确定你按照你想要的方式设定了这个条件吗?你的逻辑是重复直到结果大于0.但是如果结果大于零,那么仍然有同步进程在运行。例如,您说结果有时为4.当结果为4时,这简化为:

repeat until 4 > 0
    delay 120
end repeat
tell application "Terminal" to quit

由于4大于0,因此满足条件:它将不再重复,因为它只是重复,直到该值大于零为止。因此,它将进入下一步,即告诉终端退出。

我认为你想要重复而值

答案 1 :(得分:0)

您误解了repeat until的行为:只要条件为真,就会重复循环。由于您已经有正在运行的进程,因此您的条件将为true,因此内部部分(delay 120)将不会被执行。

只要有正在运行的进程,你想要的是重复循环。因此,您需要与= 0而不是> 0进行比较。

所以你可以写:

repeat until (do shell script "/bin/ps -ef  | /usr/bin/grep -c [r]sync") = "0"

或者你可以坚持你的条件并使用表达“只要”条件的while循环:

repeat while (do shell script "/bin/ps -ef  | /usr/bin/grep -c [r]sync") > "0"