【问题标题】:How to pass several variables from Shell Script to AppleScript in Automator?如何在 Automator 中将多个变量从 Shell Script 传递到 AppleScript?
【发布时间】:2020-08-09 19:39:52
【问题描述】:

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

在 Automator 中,我尝试像这样传递变量:运行 AppleScript > 运行 Shell 脚本 > 运行 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: 这是我需要从上面的 Run Shell Script 中获取 stdout 和最后执行进程的 PID ffmpeg 的地方。我似乎什么也得不到。我已经尝试添加一个自动机“存储变量”,但它没有收到。


使用 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 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命令行路径时,保存路径必须用引号引起来。

【问题讨论】:

标签: bash shell applescript automator


【解决方案1】:

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

  1. 不知道如何通过 Run Shell 脚本 actionRun AppleScript action 提供 input .
  2. 变量参数扩展不会发生在您身上:$serial


问题 1:

Run Shell Script action 将某些内容返回到另一个 action。例如一个Run AppleScript action,设置Run Shell Script的最后一行action为,eg:

echo "foobar"

或者:

printf "foobar"

用于多个项目,例如:

echo "foobar
barfoo"

或者:

printf "foobar\nbarfoo" 


问题 2:

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

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

变量周围有单引号时不会发生扩展,所以你需要制定你的命令扩大。或者在一个单独的步骤中,处理实现目标所必需的内容。

例如:

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 command 中,同时调整整个 command 以适合您。

换句话说,你可以摆脱,例如:

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

还有:

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

【讨论】:

  • 我接受了您的回答(两年后),但想在脚本编辑器中添加一种将 shell 脚本输入分离为多个参数的技术。见下文。
【解决方案2】:

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

我发现的一种方法:

示例 shell 脚本:

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

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

{"2022 年 1 月 21 日", "约翰"}

在 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 脚本可用于输入的多个参数是否有特殊符号?

$1 $2 或类似的东西

【讨论】:

    猜你喜欢
    • 2020-12-23
    • 2018-01-06
    • 2019-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多