[英]How to pass a variable FROM applescript TO a shell script?
我有以下脚本
#!/bin/bash
/usr/bin/osascript << EOT
set myfile to choose file
EOT
no_ext=$(python -c "print '$myfile'.split('.')[0]")
### this works - just need to know how to pass the arg
R CMD Sweave no_ext.Rnw
pdflatex no_ext.tex
open no_ext.pdf
任何人都可以指向“如何正确传递变量myfile”?
为所有建议编辑Thx!
不知道接受什么,所有答案都对我有所帮助,因为我从每个人那里学到了很多东西。
脚本中存在以下问题:
AppleScript部分中设置的变量确实在封闭的shell脚本中定义。 您必须使用命令替换与shell脚本进行数据交换。
从shell脚本调用的AppleScripts不允许进行用户交互,因为它们没有应用程序上下文。 您可以使用帮助应用程序“AppleScript Runner”来运行用户交互命令。
以下是脚本的修订版本,其中修复了这些问题:
#!/bin/bash
myfile=$(/usr/bin/osascript << EOT
tell app "AppleScript Runner"
activate
return posix path of (choose file)
end
EOT)
if [ $? -eq 0 ]
then
echo $myfile
else
echo "User canceled"
fi
首先,您需要从Applescript获取myfile
变量的内容为bash。 我不知道Applescript,所以我会在黑暗中拍摄如何写入其标准输出。 接着蟒蛇部分只是不必要的复杂性(和可能是错误的,无论如何,你是第一个后扔掉一切.
而不是最后一次)。 接下来,在bash语法中需要一个$
之前的变量名。 我认为以下脚本可以满足您的需求:
#!/bin/sh
set -e
myfile=$(osascript <<EOT
set myfile to choose file
write myfile to stdout
EOT
)
no_ext="${myfile%.*}"
R CMD Sweave "$no_ext.Rnw"
pdflatex "$no_ext.tex"
open "$no_ext.pdf"
(如果发生错误, set -e
开头会立即退出shell,而不是尝试执行pdflatex
即使没有.tex
文件或者某些文件。)
意识到applescript路径是冒号“:”分隔的。 你需要在bash中使用斜杠分隔,所以在Applecript中这就是“posix路径”。 此外,使用osascript时无法打开对话框窗口。 您必须告诉应用程序打开窗口。 接下来,你从applecript中“返回”某些内容......这就是bash的内容。 最后,在bash中执行命令并将结果赋值给变量使用``around the command。 所以知道这是一个使用applescript来获取myFile变量的shell脚本。
#!/bin/bash
myFile=`/usr/bin/osascript << EOT
tell application "Finder"
activate
set myfile to choose file with prompt "Select the file to use in bash!"
end tell
return (posix path of myfile)
EOT`
echo $myFile
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.