2016-10-24 5 views
2

У меня есть сценарий оболочки, который вызывает AppleScript. AppleScript запускает некоторые автоматические тесты программного обеспечения с данным документом.Сделать сценарий Shell ждать завершения аппликаций?

После завершения выполнения AppleScript я перемещаю документ в другую папку с помощью команды mv в моем сценарии оболочки, а затем я перемещаю следующий документ, чтобы AppleScript мог выполнять эти тесты с помощью этого нового документа. Но как только AppleScript вызывается, он перемещает документ в другую папку, не выполняя те тесты, которые выполняются в этом документе.

Как я могу подождать в сценарии оболочки, чтобы документ был перемещен только после того, как 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

Почему это -1. Скажите, пожалуйста, чтобы я мог что-то изменить, если это необходимо. –

+2

Вероятно, нисходящий избиратель хотел увидеть какой-то «код», под которым я имею в виду все, что вы устно объяснили, а также некоторый «код» на ваши попытки исправить проблему. – Inian

+0

Wait решает проблему, но это не очень хорошее решение, так как для определенных файлов может потребоваться больше времени. Я попытался, но это не сработает, даже если applescipt создан для работы в фоновом режиме, у него не будет файла, который он хочет для запуска тестов. –

ответ

0

Обычно команды оболочки выполняются последовательно. То есть следующий оператор не запускается до тех пор, пока текущий не будет выполнен, независимо от того, был ли он успешным. Поэтому, если это так, вы можете просто написать свой сценарий по одной команде за другой.

Я думаю, что osascript /pathto/applescript.app запускает некоторые задачи в другом процессе, и этот osascript возвращается из собственного исполнения, пока процесс, выполняющий «то, что вы хотите», все еще работает.

Что вы могли бы сделать, это было бы ps -aux | grep applescript.app, а затем получить pid из этого и сделать цикл while после этого, чтобы увидеть, когда программа прекратится. Но это кажется слишком сложным, и вы не знаете имя исполнения applescript.app.

Если я ошибаюсь где-то, пожалуйста, кто-нибудь поправьте меня

+1

Пожалуйста, сопроводите примечания комментария –

0

Как сказал Mayerz, сделать командный сценарий оболочки ждет конца обучения, чтобы перейти к следующей команде 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" 

Подобный пример с сделать скрипт:

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" 
+0

Я думал о том, чтобы делать то же самое раньше, но я не смог найти правильный синтаксис для этого. Если предполагается, что я хочу переместить только те файлы, у которых есть расширение.mov какие дополнения я должен сделать в вашем предлагаемом решении. Я пробовал с * .mov, но он не работал. –

+0

, чтобы получить все * .mov, решение будет зависеть, если вы используете метод Finder или метод стального сценария. Мне очень легко с помощью метода Finder, потому что вы можете создать список файлов с чем-то вроде «получить каждый файл папки xxx, чье расширение имени« mov ». – pbell

+0

« рассмотрение ответа приложения »также не решило проблему. в команду move, как только тест запускается с помощью applescript. –

Смежные вопросы