反面有一个很好的答案,pass several variables from AppleScript to Shell Script,但是当有两个或多个变量/自变量或一个bash函数时,我找不到反面的全面答案。
在Automator中,我试图像这样传递变量:运行AppleScript>运行Shell脚本>运行AppleScript。
"$@"
/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
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
时,命令行上的路径必须用引号引起来。
如果我正确阅读了您的OP,实际上您在这里有两个不同的问题。
input
。$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" & "'"