Установить список для вывода сценария оболочки в AppleScript

#shell #applescript

#оболочка #applescript

Вопрос:

У меня есть скрипт оболочки, который выводит имена файлов (по одному в строке). Я хочу поместить этот вывод в список в AppleScript.

Как я могу это сделать?

Бонусные баллы за то, как затем превратить эти строки имени файла в файловые объекты.

Редактировать:

При попытке этого:

 set theFiles to {}
repeat with i from 1 to count of filenames
    set end of theFiles to (POSIX file (item i of filenames))
end repeat
  

Я получаю это:

 error "Finder got an error: Can’t get POSIX file "/path/to/file"." number -1728 from file "Macintosh HD:path:to:file"
  

РЕДАКТИРОВАТЬ-2:

Оказывается, finder не знает о файле, который создается после запуска инструкции «tell». Как мне обновить его или сообщить ему о новом файле?

РЕДАКТИРОВАТЬ-3:

Это сработало (обратите внимание на добавление «my»):

 set theFiles to {}
repeat with i from 1 to count of filenames
    set end of theFiles to (my POSIX file (item i of filenames))
end repeat
  

Комментарии:

1. Это ошибка «Finder». Finder не знает эту команду и, следовательно, выдает ошибки. Удалите эту команду из вашего блока Finder tell. Это обычная команда applescript, а не команда Finder.

Ответ №1:

 set myFilenamesList to paragraphs of (do shell script "path/to/shell/script")
set firstFileObject to POSIX File (item 1 of myFilenamesList)
  

Когда у вас есть список, вы используете цикл повтора, чтобы выполнить итерацию по списку и что-то сделать с элементами в списке. Например, если вам нужен список файловых объектов, вы могли бы сделать это.

 set fileObjectsList to {}
repeat with i from 1 to count of myFilenamesList
set end of fileObjectsList to POSIX File (item i of myFilenamesList)
end
return fileObjectsList
  

Конечно, это не имеет особого смысла делать, потому что, как только у вас появятся файловые объекты в списке, вам нужно будет повторить этот список, чтобы что-то сделать с этими объектами… таким образом, вы будете повторять список 2 раза, когда, вероятно, будет достаточно 1 раза. Поэтому я бы сделал что-то вроде этого вместо этого…

 repeat with i from 1 to count of myFilenamesList
set thisFileObject to POSIX File (item i of myFilenamesList)
-- do something with the file object "thisFileObject"
end
  

Комментарии:

1. Как бы я создал файловые объекты для всех имен файлов. Мне это нужно в объекте list.