从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"
但结果是一样的。
答案 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"