2012-05-03 20 views
0

私は次のコードにそれと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 "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 

二つの問題を持っています! 1:非常に長いダイアログボックスが開きます。長い間、私はそれを終了するためにokを押すこともできません。 (私はリターンキーを押すことができます) 質問、どのようにダイアログボックスを停止するのですか? 2つ:それが開く新しいtexteditにテキストを置くことはありません。

+0

それはどのようなダイアログボックスが表示されていますか? 2つの答えは簡単です、BTW: 'NewDocのテキストをdiffに設定する - あなたはそれを逆にしています:)。 – kopischke

+0

diffの内容がダイアログボックスに表示されています。これはdoシェルスクリプト呼び出しのためです。シェル出力はダイアログボックスに表示されています – Cripto

答えて

0

doシェルスクリプトでダイアログが表示された場合、シェルコマンドが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 
+0

この場合の問題は引用の不足ではありませんが、違いが見つかると 'diff'は非ゼロで終了しますが、基本的には真です。あなたのコードはまだ失敗します - その代わりに[私の答え](http://stackoverflow.com/a/10429862/990363)を試してください。 – kopischke

2

あなたのダイアログボックスは、それがエラーダイアログで、出力ダイアログではありません。問題は、がエラーコードで終了している(0は差異がなく、1が違い、2がthis questionに従ったプログラムエラー)、Applescriptはこれをdo shell scriptコマンドの失敗とみなし、デバッグ、もちろん完全差分が含まれています。ただし、エラーが発生したため、diff変数には決して割り当てられません。

set diff to (do shell script "diff '" & file1 & "' '" & file2 & "'; [[ $? = 1 ]] && exit 0") 

問題を解決すること、あなたのシェルがbashであると仮定 - あなたは、終了コード1を抑制し、AppleScriptは喜んで(注意私は追加stdoutに出力をピックアップし、あなたの変数に代入しますあなたのファイルパスを引用符で囲みます - quoted form of POSIX pathも使用できます)。これはAppleScriptを介して、新しいテキストエディットの文書に挿入されるために、あなたもあなたの割り当てas per my commentを反転させる必要があり、すなわち

set text of NewDoc to diff -- not "set diff to text of NewDoc" 

すべての問題を解決する必要があること。ここで

-1

は別のアプローチです:

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 
関連する問題