纯AppleScript和Unix有不同的结果

时间:2012-04-11 19:11:23

标签: unix applescript

提前感谢您的意见。我对以下AppleScript有疑问。我运行相同的命令两次并得到两个不同的response.First一个unix命令(grep)和第二个纯AppleScript。我试图在teX文档中找到一个字符串,即\ begin {document}。我想在此字符串之前使用AppleScript添加\ usepackage {whatever}。我有一个python脚本,它做我想要的,除了我不能将活动窗口的文件位置从TeXShop传递给python,只有AppleScript。

问题:为什么unix版本与纯AppleScript版本不同?请记住\ begin {document}肯定在我正在检查的文档中。纯版本可以正常工作。

tell application "TeXShop"
    -- get the front document and save
    set thisDoc to the front document
    -- get the filename and cursor position of the document
    get path of thisDoc
    set filePath to result
    --set insPoint to offset of selection of thisDoc
end tell
set searchResult to do shell script "grep -q \\begin{document}" & filePath & "; echo $?" --echo 0 on match found/success and 1 on not found
if searchResult = "0" then
    display dialog "string found"
else
    display dialog "string not found"
end if
set findThis to "\\begin{document}"
set theFileContent to read filePath
if result contains findThis then
    display dialog "string found"
else
    display dialog "string not found"
end if

3 个答案:

答案 0 :(得分:1)

shell解释特殊字符,在这种情况下反斜杠和大括号;和grep以及AppleScript本身也解释反斜杠。

set searchResult to do shell script "grep -q '\\\\begin{document}'" & filePath & "; echo $?"

单引号保护大括号并防止shell解析反斜杠;你需要4个反斜杠,因为AppleScript会吃掉其中一个(因为同样的原因,你需要在纯AppleScript版本中使用两个反斜杠)而grep吃掉另一个反斜杠(反斜杠意味着“将下一个字符视为文字”,GNU除外{ {1}}它有时意味着“将下一个角色视为特殊”,但这不会发生在这里。)

答案 1 :(得分:0)

如果你正在运行

grep \begin{document} <file>

然后它不起作用,因为反斜杠是shell中的特殊字符。尝试:

grep \\begin{document} <file>

答案 2 :(得分:0)

  

我有一个python脚本可以完成我想要的操作,除了我不能将活动窗口的文件位置从TeXShop传递给python,只传递AppleScript。

可以 使用AppleScript获取当前打开的.tex文件的路径,然后使用do shell script将该路径作为Python脚本的参数传递。像这样的东西(如果你的python脚本接受文件路径作为命令行参数,测试,运行顺利):

property thePythonScript : "/Users/user/path/to/script.py "
tell application "TeXShop"
    set thisDoc to the front document
    set filePath to (path of thisDoc)
    do shell script ("'" & thePythonScript & "' " & quoted form of filePath)    
end tell