繁体   English   中英

如何将变量FROM applescript传递给shell脚本?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM