如何将多个变量从 Shell Script 传递到 Automator 中的 AppleScript?

How to pass several variables from Shell Script to AppleScript in Automator?

反向有一个很好的答案, 但是当有两个或更多 variables/arguments 和/或 bash 时,我找不到一个全面的反向答案功能。

在 Automator 中,我尝试像这样传递变量:运行 AppleScript > 运行 Shell Script > 运行 AppleScript.

  1. 运行 AppleScript: 将 URL 作为参数传递
  2. 运行 Shell 脚本: 使用 "$@" 作为参数
/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. 运行 AppleScript: 这是我需要获取 stdout 以及最后执行进程的 PID ffmpeg 的地方运行 Shell 上面的脚本。我似乎什么也得不到。我尝试添加一个自动程序 "Storage Variable" 但它没有收到。


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

其中returns以下为"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 命令行上的路径时,保存路径必须用引号引起来。

如果我没看错你的 OP,你实际上有两个不同的问题。

  1. 不知道如何从 运行 AppleScript action 提供 input ]运行 Shell 脚本 动作.
  2. 您的变量参数扩展没有发生:$serial


问题 1:

到return从运行Shell脚本动作到另一个行动。例如a 运行AppleScriptaction,设置运行Shell的最后一行脚本 action 至,例如:

echo "foobar"

或:

printf "foobar"

对于多个项目使用,例如:

echo "foobar
barfoo"

或:

printf "foobar\nbarfoo" 


问题 2:

我目前无法复制您的 do shell script 命令;然而,变量参数扩展没有发生的原因是变量周围有单引号 .

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

变量周围有单引号时,展开不会发生,所以你需要制定你的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" & "'"

当 运行 来自脚本编辑器的 shell 脚本并希望 return 多个参数作为输入时;并将这些参数分配给 Apple Script 中的变量:

我发现的一个方法:

示例 shell 脚本:

SHELL_VAR1=$(date)
SHELL_VAR2=$(whoami)
echo "$SHELL_VAR1","$SHELL_VAR2"

最后的 echo 命令,以逗号作为分隔符,将以这种格式输出到 Apple Script:

{"January 21, 2022", "john"}

在 Apple 脚本中:

set input to (do shell script "script.sh")
set the text item delimiters to ","
set {var1, var2} to {text item 1, text item 2} of the input

{var1, var2}

如果有另一种更简单的方法,我很想学习。

是否有 Apple Script 可用于输入的多个参数的特殊表示法?

</code> <code> 或类似的东西