Как передать несколько переменных из сценария оболочки в AppleScript в Automator? - PullRequest
0 голосов
/ 26 апреля 2020

Существует отличный ответ для обратного: передать несколько переменных из AppleScript в Shell Script , но я не могу найти исчерпывающий ответ для противоположного, когда есть две или более переменных / аргументов и / или bash function.

В Automator я пытаюсь передать переменные следующим образом: Запустить AppleScript> Запустить сценарий оболочки> Запустить AppleScript.

  1. Запустить AppleScript: который передает URL в качестве аргумента
  2. Запустить сценарий оболочки: , который использует "$@" для этого аргумента
/bin/bash serial=$(($RANDOM % 10000)) /usr/local/bin/ffmpeg -i "$@"  -c copy  bsf:a aac_adtstoasc "/Path/to/file/movie_$serial.mp4" 2>&1 $! exit 0
Запустить AppleScript: Здесь мне нужно выбрать stdout и PID последнего выполненного процесса ffmpeg из сценария запуска оболочки выше. Я не могу ничего получить. Я попытался добавить автомат "Storage Variable", но он не получает.


Используя команду AppleScript Do Shell Script, я не смог получить serial=$(($RANDOM % 10000)), чтобы на самом деле поставить серийный номер в имени файла movie_$serial.mp4. Имя файла было буквально выведено как «movie_ $ serial.mp4» вместо «movie_1234.mp4».

serial=$(($RANDOM % 10000)) отлично работает в терминале и в сценарии запуска оболочки. Не уверен, что мне не хватает, чтобы он работал с «Do Shell Script».

do shell script "/bin/bash serial=$(($RANDOM % 10000)); /usr/local/bin/ffmpeg -i " & link_ & ffmpegOpt & "'" & sPath & "$serial.mp4" & "'"

, который возвращает следующее для вызова «do shell script»:

"/bin/bash serial=$(($RANDOM % 10000)); /usr/local/bin/ffmpeg -i urlofmovie -c copy -bsf:a aac_adtstoasc '/Path/to/file/movie_$serial.mp4'"

При использовании ffmpeg путь в командной строке, путь сохранения должен быть в кавычках.

1 Ответ

0 голосов
/ 26 апреля 2020

Если я правильно прочитал ваш OP, у вас на самом деле есть две разные проблемы:

  1. Не зная, как предоставить input для Запустить AppleScript action из Выполнить сценарий оболочки действие .
  2. Расширение переменного параметра не выполняется для вас с помощью: $serial


Выпуск 1:

Чтобы вернуть что-то из Выполнить сценарий оболочки действие в другое действие, например, Запустить AppleScript action , установить последнюю строку Run Shell Script action равной, например:

echo "foobar"

Или:

printf "foobar"

Для использования нескольких элементов, например:

echo "foobar
barfoo"

Или:

printf "foobar\nbarfoo" 


Выпуск 2:

Я не в состоянии повторить вашу do shell script команду на данный момент; однако причина, по которой расширение параметра переменной не происходит, заключается в том, что переменная содержит одинарных кавычек вокруг нее.

... '/Path/to/file/movie_$serial.mp4'"

Расширение будет не происходит, когда переменная содержит одинарные кавычки , поэтому вам нужно сформулировать свою команду , чтобы ее можно было расширить. Или на отдельном шаге обработайте то, что необходимо для достижения sh цели.

Например:

set sPath to "/path/to/file/movie_"
set serial to ((random number from 0 to 32727) mod 10000) as string
set pathFilename to sPath & serial & ".mp4"

Затем вы можете использовать, например:

... & pathFilename's quoted form

В вашей do shell script команде при настройке всей команды на работу для вас.

Другими словами, вы можете избавиться, например:

/bin/bash serial=$(($RANDOM % 10000));

А:

& "'" & sPath & "$serial.mp4" & "'"
...