我有一个调用AppleScript的shell脚本。 AppleScript对具有给定文档的软件运行一些自动化测试。
AppleScript完成执行后,我在shell脚本中使用mv
命令将文档移动到其他文件夹,然后我移动下一个文档,以便AppleScript可以使用这个新文档运行这些测试。但是一旦调用AppleScript,它就会将文档移动到另一个文件夹,而不会在该文档上运行那些测试。
如何在shell脚本中等待,以便在AppleScript完成所有测试后才移动文档?
1. mv $file "/path/to/file" (Moving the document to the execution folder)
2. osascript /pathto/applescript.app (it will use this execution folder to run its tests)
3. mv "/path/to/file" /Users/Desktop/tempfolder (moving the document on which the test is completed to a temp folder)
步骤2和3一个接一个地无需等待,因此在测试完成之前移动要运行测试的文档。
答案 0 :(得分:0)
通常,shell命令按顺序执行。也就是说,在当前的一个语句执行完毕之前,下一个语句不会运行,无论它是否成功。因此,如果是这种情况,您只需在一个接一个的命令后编写脚本。
我想osascript /pathto/applescript.app
在一个不同的进程中运行一些任务,并且osascript从它自己的执行返回,而进程正在执行你想要的"还在运行。
你可以做的是ps -aux | grep applescript.app
然后从中获取pid,然后执行一段时间循环以查看程序何时停止。但这似乎过度设计了,你不知道applescript.app的执行名称。
如果我错了,请任何人纠正我
答案 1 :(得分:0)
正如Mayerz所说,shell脚本命令正在等待指令结束转移到下一个AppleScript命令。无论如何,您还可以使用“考虑应用程序响应”块。以下是在Finder中移动的示例:
set A to ("myVolume:Users:Me:Documents:sample.mov") as alias
set B to ("Users:me:Desktop:") as alias
tell application "Finder"
considering application responses
move A to B
end considering
end tell
display dialog "done"
使用do shell脚本的类似示例:
set A to ("myVolume:Users:Me:Documents:sample.mov") as alias
set B to path to desktop
set AU to POSIX path of A
set BU to (POSIX path of B) & "test2.mov"
tell application "Finder"
considering application responses
do shell script "mv " & (quoted form of AU) & " " & (quoted form of BU)
end considering
end tell
display dialog "done"