Macos 如何防止applescript中出现自动对话框?

Macos 如何防止applescript中出现自动对话框?,macos,shell,applescript,Macos,Shell,Applescript,我有以下代码 on open the_Droppings -- set something to {item 1 of the_Droppings, item 2 of the_Droppings} set file1 to POSIX path of item 1 of the_Droppings set file2 to POSIX path of item 2 of the_Droppings set diff to (do shell script "

我有以下代码

on open the_Droppings


    -- set something to {item 1 of the_Droppings, item 2 of the_Droppings}
    set file1 to POSIX path of item 1 of the_Droppings
    set file2 to POSIX path of item 2 of the_Droppings
    set diff to (do shell script "diff " & file1 & " " & file2)
    if (diff is equal to "") then
        display dialog "files are the same"
    else
        set diff to ""
        tell application "TextEdit"
            activate
            set NewDoc to make new document
            set diff to text of NewDoc
        end tell

    end if
end open
end
有两个问题! 第一:它会打开一个很长的对话框。太长了,我甚至不能点击ok退出它。(我知道我可以按回车键) 问题,如何停止对话框?
第二:它从不将文本放入它打开的新文本编辑中

当执行shell脚本显示对话框时,问题是shell命令没有返回0。错误的原因可能是您没有使用的引用形式。还可以将文本管道化到文本编辑器

on open these_Items
    set file1 to quoted form of POSIX path of item 1 of these_Items
    set file2 to quoted form of POSIX path of item 2 of these_Items
    do shell script "diff " & file1 & " " & file2 & " | open -f -e"
end open

您的对话框不是输出对话框,而是错误对话框。问题是,
diff
如果发现差异(0表示无差异,1表示差异,2表示程序错误,根据),Applescript将此视为
do shell script
命令的失败,并有助于显示调试输出,其中当然包含完整的差异。但是,它从未分配给
diff
变量,因为它触发了一个错误

假设您的shell是
bash
,请执行以下操作

set diff to (do shell script "diff '" & file1 & "' '" & file2 & "'; [[ $? = 1 ]] && exit 0")
将解决此问题–您抑制退出代码1,AppleScript愉快地在
stdout
上拾取输出并将其分配给您的变量(注意,我在文件路径中添加了引号–您也可以使用POSIX路径的
引号形式)。要通过AppleScript将其插入到新的文本编辑文档中,您还必须反转分配,即


这将解决所有问题。

这里是另一种方法:

set resultsPath to "~/Desktop/results.txt"

try
    do shell script "diff " & file1 & space & file2 & " >" & resultsPath
end try

set yyy to do shell script "cat " & resultsPath

if yyy is "" then
    display dialog "files are the same"
else
    do shell script "open " & resultsPath
end if

它显示的是什么对话框?两个问题的答案很简单,顺便说一句:
将NewDoc的文本设置为diff
——你可以用另一种方式:)。diff的内容将显示在一个对话框中。这是因为doshell脚本调用。shell输出显示在对话框中基本上是真的,尽管本例中的问题不是缺少引用,但事实
diff
在发现差异时退出非零。您的代码仍将失败-请尝试中的代码。
set resultsPath to "~/Desktop/results.txt"

try
    do shell script "diff " & file1 & space & file2 & " >" & resultsPath
end try

set yyy to do shell script "cat " & resultsPath

if yyy is "" then
    display dialog "files are the same"
else
    do shell script "open " & resultsPath
end if