如何在Automator中将几个变量从Shell脚本传递到AppleScript?

问题描述 投票:0回答:1

反面有一个很好的答案,pass several variables from AppleScript to Shell Script,但是当有两个或多个变量/自变量或一个bash函数时,我找不到反面的全面答案。

在Automator中,我试图像这样传递变量:运行AppleScript>运行Shell脚本>运行AppleScript。

  1. 运行AppleScript:,该方法将URL作为参数传递
  2. Run Shell Script:,该参数使用"$@"
/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
  1. Run AppleScript:这是我需要拾取stdout和上面的Run Shell Script中最后执行的进程ffmpeg的PID的地方。我似乎什么也得不到。我尝试添加自动器“存储变量”,但没有收到。

使用AppleScript的Do Shell Script命令,我无法获得serial=$(($RANDOM % 10000))在文件名movie_$serial.mp4中实际放入序列号。文件名原样输出为“ movie_ $ serial.mp4”,而不是“ movie_1234.mp4”。

serial=$(($RANDOM % 10000))在终端和运行Shell脚本中均能完美运行。不知道我想让它与“ Do Shell Script”一起使用时缺少什么。

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

将为“ do shell脚本”调用返回以下内容:

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

[使用ffmpeg时,命令行上的路径必须用引号引起来。

bash shell applescript automator
1个回答
0
投票

如果我正确阅读了您的OP,实际上您在这里有两个不同的问题。

  1. 不知道如何从运行Shell脚本 动作向[[运行AppleScript 动作提供input
  2. 使用[$serial]不会为您发生变量参数扩展>

问题1:

要从

Run Shell脚本 action返回到另一个action。例如Run AppleScript action,将Run Shell Script action的最后一行设置为例如:echo "foobar"

或:

printf "foobar"

用于多个项目,例如:

echo "foobar barfoo"

或:

printf "foobar\nbarfoo"


问题2:

目前我无法复制您的do shell script

command;但是,未发生变量参数扩展的原因是因为变量周围带有单引号... '/Path/to/file/movie_$serial.mp4'"

variable
周围带有

single-quotes时,扩展将不会发生,因此您需要制定command以便进行扩展。或者在单独的步骤中,处理实现目标所需的条件。例如:

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" & "'"

© www.soinside.com 2019 - 2024. All rights reserved.