ゆっくり技術ノート!

いつかきっとできるだろうよ

TerminalでAppleScriptを実行した時のlogコマンド挙動

追記 この情報は古くなりました。

  • OS X 10.10 Yosimete ではtell application内のlogも表示されるようです

Ruby 経由でAppleScriptを実行する
test.rb

result = `osascript test.scpt`

test.scpt

on run {}
    funcA()
end run

on funcA()
    log "in funcA"
    funcB()
    funcC()
end funcA

on funcB()
    log "in funcB"
end funcB

on funcC()
    log "in funcC"
    tell application "Finder"
        log "in tell application Finder"
        
        tell application "Terminal"
            log "in tell application Terminal"
        end tell
    end tell
end funcC

すると
結果

$ ruby test.rb
in funcA
in funcB
in funcC

他のハンドラ内のlogコマンドを表示されるのに、tell application内では表示されなかった
そこで表示用のハンドラを作りtell application内から呼ぶことで解決した
test.rb

on run {}
    funcA()
end run

on funcA()
    log "in funcA"
    funcB()
    funcC()
end funcA

on funcB()
    log "in funcB"
end funcB

on funcC()
    log "in funcC"
    tell application "Finder"
        display("in tell application Finder") of me
        
        tell application "Terminal"
            display("in tell application Terminal") of me
        end tell
    end tell
end funcC

on display(message)
    log message
end display

結果

$ ruby test.rb
in funcA
in funcB
in funcC
in tell application Finder
in tell application Terminal