Ваша проблема, по-видимому, не связана с циклом или использованием argv. Вот гораздо более простой тестовый случай, когда только последний do shell script
фактически возвращает результат:
do shell script "echo foo"
delay 2
do shell script "echo bar"
Кроме того, следующее небольшое изменение даст ожидаемые результаты:
to run argv
do shell script "echo " & (count argv) & " arguments > /test.txt"
repeat with i from 1 to (count argv)
do shell script "echo 'Argument " & i & ": " & (item i of argv) & "' >> /test.txt"
end repeat
end run
test.txt
будет содержать четыре строки, например:
3 arguments
Argument 1: foo
Argument 2: bar
Argument 3: baz
Этот обходной путь не выполняется:
to run argv
do shell script "echo " & (count argv) & " arguments > /tmp/foo.txt"
repeat with i from 1 to (count argv)
do shell script "echo 'Argument " & i & ": " & (item i of argv) & "' >> /tmp/foo.txt"
end repeat
do shell script "cat /tmp/foo.txt"
do shell script "rm /tmp/foo.txt"
end run
Даже сейчас возвращается только последняя строка. Это может быть связано со следующим вопросом TN2065 :
В: Мой скрипт будет производить вывод в течение длительного времени. Как прочитать результаты по мере их поступления?
A: Опять же, краткий ответ: вы не выполняете сценарий оболочки, который не будет выполнен, пока команда не будет выполнена. В терминах Unix его нельзя использовать для создания канала. Однако вы можете поместить команду в фоновый режим (см. Следующий вопрос), отправить ее выходные данные в файл, а затем прочитать файл по мере его заполнения.
Увы, у меня недостаточно AppleScript-fu, чтобы знать, как заставить сам AppleScript читать несколько строк, что, я подозреваю, сработает.