如何将多个变量从 Shell Script 传递到 Automator 中的 AppleScript?
How to pass several variables from Shell Script to AppleScript in Automator?
反向有一个很好的答案, 但是当有两个或更多 variables/arguments 和/或 bash 时,我找不到一个全面的反向答案功能。
在 Automator 中,我尝试像这样传递变量:运行 AppleScript > 运行 Shell Script > 运行 AppleScript.
- 运行 AppleScript: 将 URL 作为参数传递
- 运行 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
- 运行 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,你实际上有两个不同的问题。
- 不知道如何从 向 运行 AppleScript action 提供
input
]运行 Shell 脚本 动作.
- 您的变量参数扩展没有发生:
$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>
或类似的东西
反向有一个很好的答案,
在 Automator 中,我尝试像这样传递变量:运行 AppleScript > 运行 Shell Script > 运行 AppleScript.
- 运行 AppleScript: 将 URL 作为参数传递
- 运行 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
- 运行 AppleScript: 这是我需要获取
stdout
以及最后执行进程的 PIDffmpeg
的地方运行 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,你实际上有两个不同的问题。
- 不知道如何从 向 运行 AppleScript action 提供
input
]运行 Shell 脚本 动作. - 您的变量参数扩展没有发生:
$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>
或类似的东西