0

提前感谢您的意见。我对以下 AppleScript 有疑问。我两次运行相同的命令并得到两个不同的响应。第一个是 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
4

3 回答 3

1

shell 解释特殊字符,在这种情况下包括反斜杠和大括号;并且grepAppleScript 本身也解释反斜杠。

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

单引号保护大括号,防止shell解析反斜杠;您需要 4 个反斜杠,因为 AppleScript 会吃掉一个(出于同样的原因,您在纯 AppleScript 版本中需要两个反斜杠)并grep吃掉另一个(反斜杠的意思是“将下一个字符视为文字”,但在 GNUgrep中它有时表示“处理下一个字符是特殊的”,但这不会发生在这里)。

于 2012-04-11T19:21:53.543 回答
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
于 2012-04-12T13:56:00.970 回答
0

如果你正在跑步

grep \begin{document} <file>

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

grep \\begin{document} <file>
于 2012-04-11T19:16:03.797 回答