0

次のコードがあります

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

それには2つの問題があります!1 つ: 非常に長いダイアログ ボックスが開きます。OKを押して終了することさえできないほどです。(リターン キーを押せばよいことはわかっています) 質問、ダイアログ ボックスを停止するにはどうすればよいですか? 2: 開いた新しい textedit にテキストを入れません。

4

3 に答える 3

2

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

シェルがbashであると仮定すると、次のようになります

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

問題を解決します – 終了コード 1 を抑制すると、AppleScript は喜んで出力を取得stdoutし、変数に割り当てます (ファイル パスに引用符を追加したことに注意してください – を使用することもできますquoted form of POSIX path)。これを AppleScript 経由で新しい TextEdit ドキュメントに挿入するには、私のコメントに従って割り当てを反転する必要もあります。

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

それはすべての問題を解決するはずです。

于 2012-05-03T10:50:19.707 に答える
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
于 2012-05-03T10:37:49.047 に答える
-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
于 2012-05-03T12:47:19.200 に答える