FileMakerからコマンドを送り込む二つの方法 +三つ目

FileMakerからAppleScriptを使ってターミナルコマンドを送り込む二つの方法についておさらいです。そして最後にオマケの+1。スキルが育てばいずれ使えるようになりましょう。

AppleScript を使ってコマンドを送り込む

FileMakerからターミナルで使うコマンドを実行させる方法は本当は一つで、それは「AppleScriptを実行」させることです。

ということは「FileMakerからコマンドを送り込む」というより「AppleScriptから」と言うほうが適切。なのにFileMakerに特化するのは、フィールドやスクリプトを使って簡単に実現させることを前提にしているからにすぎません。

ここでは、AppleScriptで実行できる形に書き換える二つのやりかたと、追加で+1についておさらいします。

●  do script を使う

コピペで実行する

● 追記の +1、 do shell script

ではいきます。

 

do script “コマンド”

AppleScriptを使ってターミナルにコマンドを送り込みたいとき、do script “コマンド” を使うという方法があります。

送り込むコマンドが極めて単純なものである場合、有効です。単純じゃないコマンドの場合、作成者に多少スキルが求められます。ド素人で雑魚の筆者には無理でした。しかし時が経ち、その方法を会得しました。

例えば「SSH digitalboo」みたいな1行だけ、かつ、パラメータもなくただ送り込むだけのかんたんコマンドなら「do script with command “SSH digitalboo”」と書くだけなので凡人以下のdigitalboo筆者にも楽勝です。楽勝というのは、この一文をFileMakerの計算式やスクリプトを使って自動生成させることも含めて楽勝って意味です。

tell application "Terminal"
  activate
    do script with command "SSH dititalboo"
end tell

こんな風に仕上げて、スクリプトステップ「AppleScriptを実行」で実行させればいいだけです。

送り込みたいシェルスクリプトが複雑なとき、たとえばパスが含まれていて、そのパスの中にスペースが含まれているような場合、また、引数・パラメータなどが付け加えられている場合などは難しいことになります。

理解力のないまま、適当に書いてもエラーではじかれます。

エラー画面1

以前はこのあたりにハズレのコードを載せていましたが間違ってるコードを載せても意味ないので消しました。

さらにエラー
さらにエラー

いろいろ試したり調べたり無駄なあがきをし続け、だんだん腹が立ってきてやさぐれ始めます。答えは多分こういうことだと思います。

do script は素人が軽く考えるような安直なものではない。手を出すんじゃねえ。

 

※ 追記

do script は意外に簡単に習得できました。その話をこちらに書きましたのでご参考に。

AppleScriptからdo script で呼び出すコマンドのパスにスペースがあるとエラーになる問題を解決

上記記事はパスのスペースに留まらず、do script にコマンドを入れる法則が書かれています。

この記事は do script をどうやっても上手く使えなかった頃の記事ですので、一旦 do script から離れ、別のアプローチについて書いていますので尊重しておきます。

コピペで送る

do script with command などというコマンドを知らない頃から、AppleScriptを使ってターミナルにコマンドを送りこむことをすでにやっていました。

AppleScript でキーボードショートカットを送り込めますから、ターミナルウインドウにコピー済みのコマンドをペーストするという、普段人としてやってることと同じ事をスクリプトで自動化していただけです。

FileMakerでターミナルのコマンドを生成したらスクリプトステップで

1. まずそれをコピーし、
2. 次にターミナルに切り替えて念のために新規ウインドウを開いて、
3. ペーストする

AppleScriptを実行ダイアログ
ターミナルで新規ウインドウしてリターン込みでペースト。この後、用が済めばウインドウを閉じる( key code 13 using {command down}  )までやっとくことを推奨

key code 45は N、9はVです。ターミナルに移動してコマンドN、コマンドVを行ってるだけという。13はWです。

これに最後「リターン」を付け加えればより良くターミナルコマンドが実行できますね。リターンの key code は36だったかな。52だったかな。(→キーコードを調べるアプリ

コピペを再現しただけの野蛮なやり方です。難なくターミナルにコマンドを送り込めます。これで動くし、満足していました。

妙に知恵が付いて「do script with command」なんてものを知ったが為に「これを使ったほうが賢そうに見えるかも」と思ったのが運の尽き。身分不相応の浅知恵では何も上手く行かずやさぐれるだけだと学びました。

教訓

FileMakerでAppleScriptを使ってターミナルにコマンドを送り込むとき、作り手が素人で、そのコマンドが極めて単純なら「do script with command」が有効、そうでない場合はコピペが有効。

 

Penguin icon  その後時が流れ・・・

上の方の囲みの中にも書いていますが、この件の続きというか、do script についての知見が広がりました。do script を使いこなせるなら、コピペで実行するより効率が良いでしょう。

AppleScriptからdo script で呼び出すコマンドのパスにスペースがあるとエラーになる問題を解決

三つ目の選択肢 do shell script

Penguin icon  do script をマスターしたあなたや私は、次なるステップ、do shell script にチャレンジすることになります。

do scirpt では、ターミナルをtellしてコマンドを送り込みました。

tell application "Terminal"
   activate
     do script with command "コマンド"
 end tell

do shell script はターミナルを介さず命令できます。

do shell script "コマンド"

これだけです。

ただし、親切で優しくて融通を利かせてくれるターミナルをすっ飛ばすことで、細かな問題も頻出します。それに対処していくことができれば、速度やインターフェイスデザイン的に有利でスマートな方法を構築できるでしょう。

ターミナルを介さない難易度は覚悟すべき高い山。その一端が垣間見れるポストもありますのでご参考に。

do shell script で pbcopy が動かない事例を解決

 

コメント

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください