2012-02-28 14 views
4

を使用している場合、独自の変更日を変更することからAppleScriptスクリプトは、私はGeekToolで自分のデスクトップ上のiTunesトラック情報を表示するために使用AppleScriptスクリプトを持っています。私は、スクリプトを複製せずにトラック情報の異なる部分を表示することができますので、私はスクリプトに異なるパラメータを渡すためにon runargvを使用します(たとえば、私はosascript itunes.scpt titleを実行することにより、単にタイトルを取得することができますし、私はosascript itunes.scpt albumを実行することで、アーティスト/アルバムを得ることができます)。防止渡される引数

ただし、引数を指定してスクリプトを実行するたびに、実際のファイルの変更日が変更されます。スクリプトは何かと書かれているか、何らかの変更を行っているようです。

これは、ライオンが2週間以上に変更されていないファイルに対してファイルロックを導入OS X 10.7、中を除き、通常は問題ではありません。私のiTunesのスクリプトはOSによってロックされると、それが実行されるとき、それはこれらの目に見えない、自己更新のいずれかの多くを作ることができない、と私のシステムログは、このようなエラーだらけます:

osascript: couldn't save changes to script /path/to/script: error -54 

私はで一時的にこの問題を解決することができます手動でスクリプトに何らかの変更を加える(たとえば、空行を追加する)が、2週間後にはLionがロックするため、すべてが再び中断されます。

私は理論的にはこの問題を解決するために、ファイルのロック、システム全体を無効にすることもできますが、私はむしろ、私がいない他のもののためにそれをしたいと思います。

on run argvを使用して、AppleScriptファイルに引数を渡すには、そのスクリプトの変更日を変更しないでください。

ここには最小の実例があります。これをコマンドライン(oscascript test.scpt blah)から実行すると、スクリプトの変更日が変更されます。

--test.scpt 
on run argv 
    tell application "iTunes" 
     if player state is playing then 
      set trck to current track 
      set title_text to (get name of trck) 
      return title_text & " " & item 1 of argv 
     end if 
    end tell 
end run 

答えて

4

奇妙な問題(それは、少なくともまで再コンパイル)。これは、例えば実行ハンドラ(明示的または黙示)で定義されている項目が含まれています

on run 
    try 
     display dialog someVariable -- will error the first time 
    on error -- set global 
     beep 
     set someVariable to time string of (current date) 
    end try 
end run 

あなたはグローバル変数の設定または変更されないようにハンドラにコードを動かしてみてください。

+0

この場合、永続的でグローバルな変数はどれですか? 'run'ハンドラに入っているものやiTunesの手順で設定されているものは何ですか?私はちょうど別のハンドラにすべてのiTunesのものを移動し、ちょうど '実行'の内部からそれを呼び出すだろうか? – Andrew

+0

trckやtitle_textなどの実行ハンドラで定義されているすべての変数はグローバルです。これらの変数はローカルでスクリプトと一緒に保存されないので、ハンドラから別のハンドラに移動して実行ハンドラから呼び出す必要があります。 –

+0

うわー、私はこれを知らなかった。これを実証してくれてありがとう。コードを別のハンドラに入れずに問題を修正することができました。実行ハンドラの一番上に "local someVariable"を追加するだけです。これを行うと、「表示ダイアログ」は決して表示されず、スクリプトの変更日は決して変更されません。 – regulus6633

0

あなたは、標準入力の代わりに、直接それを読ん経由osascriptにスクリプトを供給してみることができます。あなたがそこにダッシュが必要

osascript - args < /path/to/script 

または

cat /path/to/script | osascript - args 

osascriptのマンページを参照してください)

しかし、私は修正時の更新動作を再現することはできません(私はよSnow Leopardで)、これは別のものかどうかわかりません。 (確かにそれはosascriptのせいかどう)osascriptは、ファイルと直接接触していないので、しかし、それはうまくいくかもしれません。すべてグローバル変数は永続的で、スクリプトと一緒に保存されている通常のAppleScriptの(ないXcodeの品種)、で定義されているプロパティに加えて、いずれの場合

+0

HRM。これらのオプションはどちらも私にこのエラーを与えます: '0:13:構文エラー:実数はこの識別子の後ろにはいけません。 (-2740)。しかし、 'osascript'マンページの超簡単な例題' a.scpt'でその構文を使ってみると、同じエラーが出ます。 – Andrew

+0

@Andrew奇妙な。私は両方のコマンドを投稿する前にテストしましたが、Snow Leopardでは正常に機能しましたが、元のコマンドも同様です。 – Flambino

+0

@Andrew: '.scpt'ファイルは単なるスクリプトではなく、テキスト形式のスクリプトコードとプリコンパイルされた形式のスクリプトを含み、すべてが一緒にバイナリ形式で保存されます。スクリプトファイルを読むために 'osascript'と言うと' .scpt'ファイルから純粋なスクリプトを抽出する方法を知っていますが、 'STDIN'でデータを入力すると純粋なスクリプトコード(ASCII)スクリプトファイル。 ScriptEditorに純粋なテキストとして保存されたスクリプトは拡張子 '.scpt'ではなく' .applescript'を持ち、人間が読めるスクリプトソースです。 – Mecki

関連する問題