を使用している場合、独自の変更日を変更することから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
この場合、永続的でグローバルな変数はどれですか? 'run'ハンドラに入っているものやiTunesの手順で設定されているものは何ですか?私はちょうど別のハンドラにすべてのiTunesのものを移動し、ちょうど '実行'の内部からそれを呼び出すだろうか? – Andrew
trckやtitle_textなどの実行ハンドラで定義されているすべての変数はグローバルです。これらの変数はローカルでスクリプトと一緒に保存されないので、ハンドラから別のハンドラに移動して実行ハンドラから呼び出す必要があります。 –
うわー、私はこれを知らなかった。これを実証してくれてありがとう。コードを別のハンドラに入れずに問題を修正することができました。実行ハンドラの一番上に "local someVariable"を追加するだけです。これを行うと、「表示ダイアログ」は決して表示されず、スクリプトの変更日は決して変更されません。 – regulus6633