これが私のファイルです:
launcher.applescript
tell application ":path:to:applescript:apps:Shell-script-launcher.app" to launch
Shell-script-launcher.app [AppleScript、アプリケーションとして保存]
do Shell script "say starting script"
望ましい動作:
実際の動作:
アプリを「実行のみ」および「開いたまま」として保存しようとしました。まだ進展なし。何がお勧めですか。最終結果は、Applescriptではなくアプリケーションでなければなりません。
run
コマンドが起動してアプリケーションを実行します hidden activate
コマンドは、アプリケーションを起動、実行、および activates します(最前面のアプリケーションにします)。launch
、 Appleによる 、「まだ実行されていない場合はアプリケーションを起動しますが、実行コマンドは送信しません。」on run
ハンドラーは呼び出されません)しかし、実際には10.9までは当てはまりません-以下を参照してください。スクリプトは、他のアプリケーションと同じように、スクリプトアプリケーションにコマンドを送信できます。開いたままではないアプリケーションを起動してそのスクリプトを実行するには、次のように、起動コマンドの後に実行コマンドを使用します。
launch application "NonStayOpen"
run application "NonStayOpen"
起動コマンドは、暗黙的な実行コマンドを送信せずにスクリプトアプリケーションを起動します。 runコマンドがスクリプトアプリケーションに送信されると、スクリプトアプリケーションはコマンドを処理し、必要に応じて応答を送信して終了します。
launch
単独ではアプリケーションを run するのに十分であり、確かにAppleScriptベースのアプリケーションで動作する唯一のコマンドです 。 run
またはactivate
を実行しようとすると、(launch
に加えてかどうかに関係なく)アプリケーションが実行されます-AppleScriptエディターから実行した場合でも twice でさえも実行されます(!; osascript
で1回だけ)-失敗を報告します<appName> got an error: Connection is invalid
。
これは私にバグとして現れます。
OSXバージョン<= 10.7の動作がわかりません。
注:launch
を使用して実行されない動作を1回確認しましたが、OS X 10.9.2およびOS X 10.8.5でゼロから作成した、開いたままのAppleScriptベースのテストアプリもすべて executes launch
を使用したスクリプト-ドキュメントの説明と矛盾します。
お使いのシステムの動作が異なるかどうか、および/または古いバージョンの動作を教えてください。 launch
が作成されて実行されないアプリのOSXバージョンは何ですか?
OSX 10.1では、動作はドキュメントと一致していますですが、注目に値する点が1つあります。
run application
で十分です-最初に別のlaunch application
コマンドを使用する必要はありません。do Shell script
と標準のopen
ユーティリティを使用して問題を回避します。これは、アプリケーションがAppleScriptベースかどうかに関係なく機能します。do Shell script "open " & ¬
quoted form of POSIX path of ¬
alias ":path:to:applescript:apps:Shell-script-launcher.app"
あなたがアプリケーションのタイプを知っているなら、あなたは前もって呼び出しています:
run script file
を使用するのが最適です-これには、呼び出されたAppleScriptベースのアプリケーションがオブジェクトを呼び出し元に直接返すことができるという追加の利点があります。run script file ":path:to:applescript:apps:Shell-script-launcher.app"
注:load script file
もあり、実際にすぐに実行せずに、スクリプトコードを load にロードするだけです。
run
/activate
を使用して、アプリを非表示/最前面に実行します。run application ":path:to:applescript:apps:Shell-script-launcher.app"
run
とエラーを無視をtry ... end try
で行うことができます-欠点は、検出できないことですアプリケーションの呼び出しの実際の失敗。これを緩和するには、特定のConnection invalid
エラーのみを選択的に無視します(これは、このエラーが正当に発生しないことを前提としています)[OSX 10.10では必要ありません]:
try
run application "Macintosh HD:Applications:_Sandbox-AppleScript0.app"
on error number -609 # 'Connection is invalid' error that is spuriously reported
# simply ignore
end try
launch
コマンドを使用するを試すことができます(ただし、OPでは<= 10.7 OSXバージョンでの作業が原因で)機能しませんでした: launch application ":path:to:applescript:apps:Shell-script-launcher.app"
ただし、次の2つの理由により、これは非推奨です。
launch
の動作が修正され、実行されなくなったため、コードをそこで実行すると中断します。launch
で呼び出されたときに実行(非表示)しますが、AppleScriptは「実行コマンドを送信せず」、「通常の起動を実行せずにアプリケーションを開くことができます」という ドキュメントによると 新しいウィンドウを開くなどの手順」-それが正確に何を意味するのかは明確ではなく、アプリケーションによってこれは異なる方法で処理されるようです。open を試しましたか?
do Shell script "open 'path/to/applescript/apps/Shell-script-launcher.app' && say starting script"
Applescriptには「スクリプトの実行」コマンドがあります。 applescriptsまたはapplescriptアプリケーションで動作します。デスクトップにアプリがある場合、これは機能します...
set appPath to (path to desktop as text) & "Shell-script-launcher.app"
run script file appPath
「try」キーワードの間に置きます。
try
tell application ":path:to:applescript:apps:Shell-script-launcher.app" to activate
end try
スクリプトをアプリケーションとして保存します。目的のスクリプトをスクリプトフォルダーに追加します(下のパスを参照)
次のように実行し、実行するスクリプトのタイプごとに変更します...
property theApplicationPath : the path to me as text <br/>
property theShellScriptPath : theApplicationPath & "Contents:Resources:Scripts:test.command"<br/>
property theShellScript : the quoted form of POSIX path of theShellScriptPath<br/>
<br/>
tell application "Terminal" to (do Shell script "/bin/bash " & theShellScript)
<br/>
ブーム、ボブはあなたの叔父さんです!少なくとも私にとっては。
とても簡単です。通常のdo Shell script
、 例えば:
do Shell script "open " & ¬
quoted form of POSIX path of ¬
alias ":path:to:applescript:apps:Shell-script-launcher.app"
これは役立つかもしれませんが、私はこの問題の専門家ではありません。この場合、二重起動の動作(Yosemiteでは、他のバージョンのOS Xを使用していません)が非常に煩わしく、掘り下げて、すでに実行されているかどうかを確認できることがわかりました。
このスクリプトは、いつでも好きなときに新しい端末を起動できるようにするためのものです。
if application "Terminal" is running then
tell application "Terminal"
activate
do script ""
end tell
else
tell application "Terminal" to activate
end if