2017-10-24 14 views
2

私はiTerm2用の簡単なスクリプトスクリプトを書いています。これはたくさんのタブを生成し、その中でサービスを実行し始めます(マイクロサービスがたくさんあり、ローカルでテストするためにはすべて実行する必要があります)。AppleScriptを強制的に同期して実行できますか?

ほとんどのものは機能していますが、私は、コマンドを早く送るAppleScriptに関連していると思います。

create tab with default profile 
tell the current session 
    write text "cd services/myservice" 
    write text "make build-docker" 
    write text "make run-docker" 
end tell 

は理論的には、このチャンクが

1)新しいタブを作成しなければならない 2)新しいディレクトリ 3)ドッキングウィンドウの画像と 4)ファイル名を指定して実行を構築するに変更しますのは、具体的な例を見てみましょうそのドッカー画像。

これは時々動作しますが、より頻繁にはステップ4の問題にぶつかります。具体的には、「make build-docker」が最後に実行されたコマンドであることを確認するだけです。このコマンドは時間がかかりますので、ビルドの実行中は「run-dockerを作成」を送信して無視されます。 AppleScript/iTerm2にこのコマンドが完了して実行が正しく実行されるのを待たせる方法はありますか?

これは明らかです。読んでくれてありがとう!

答えて

1

あなたがITERMのシェル統合が有効になっている場合は、コマンドが終了したかどうかを判断するためにis at shell promptをポーリングすることができます

tell application "iTerm2" 
    tell current window 
    create tab with profile "BentoBox" 
    tell current session 
     write text "sleep 5" 
     repeat while not (is at shell prompt) 
      delay 0.5 
     end repeat 
     write text "sleep 5" 
    end tell 
    end tell 
end tell 

そうでない場合、あなたは1 TELLで一緒に文字列にすべてのコマンドをお勧めします:

write text "cd services/myservice; make build-docker; etc; etc; etc.." 

またはシェルスクリプトの中に置いて、それを実行します。

write text "my_super_duper_shell_script.sh" 

またはTMPファイルにCMDSを書いて、それを実行するためにAppleScriptを使用します。

再:How can I create or replace a file using Applescript?

+0

ファンタスティック - 本当にありがとうございました! –

+0

また、bashはデフォルトではエラーを無視しています。 cdコマンド/ myservice &&を使用してビルドドッカー&& etc && etc &&などを作成します。 "前のコマンドが成功した場合にのみ各シェルコマンドが実行されるようにします。あるいは、 '.sh'ファイルとして保存している場合は、' set -e'コマンドを先頭に追加して、コマンドが失敗した場合にスクリプトを中止するようにbashに指示します。 – has

関連する問題