Automator で自動化を試みようとしましたが手強かったという過去記事の続編、顛末です。
「ターミナルで動くのにAutomatorのシェルではエラー」という投稿があるんですが、唐突にその続編です。
それと、pbcopy の小ネタ の余談として書き始めて長くなった部分を削ってこのポストにしました。
前回のあらすじ
Automatorを使って画像のメタデータを取得することを自動化しようとしていました。Exiftoolのコマンドをシェルに送り込み、メタデータを取得してcsvファイルに書き出しFileMakerで利用するためです。Automatorでシェルを使うやり方で難儀したものの、結果的に上手く出来ました。
その後
その後、この取り組みがどうなったかというと、放置して破棄しました。
もともとはイメージのメタデータを取得したかっただけで、csvファイルの生成が目的というわけではありませんでした。いつの間にかそれが目的化してしまい、そのせいで奇っ怪長大なシステムの構築を余儀なくされました。
そのシステムを作ってる途中、ふと我に返って「こんなのやってられるか馬鹿らしい」と、放置したというわけです。
本末が転倒することは当ブログだけの特徴ではなく、世間様も同じようなものです。例えば良い政治に転換したいがために政権交代を目指しているうちに政権交代だけが目的化して、そのためには悪い政治も致し方ないと言いだす事例などそこいらにごろごろあります。
さて、時が流れ、阿呆のデジタル部部長にも僅かながら知恵が付き、ふたつのことを学びました。一つはFileMakerからAppleScriptを利用すること、もう一つはコマンドpbcopyです。
pbcopy についてはFileMaker関係ないので、いろいろと応用できると思います。
二つの知恵
FileMakerからAppleScriptやターミナルを利用する
一つは、FileMakerでデータやコードを生成して、AppleScriptを実行させたりターミナルに送信することです。
→ Macで実行もできるFileMakerコード管理 その2
→ FileMakerからターミナルコマンドを送り込む二つの方法
小難しい変数の値やパスの生成や条件などを FileMaker であらかじめ済ませ、最終的なスクリプトなりコマンドなりを生成して、それを外部に送り込みます。コマンドを送り込んで完結するような処理ならFileMakerから容易く命令できることを憶えました。
コマンド pbcopy
もうひとつは最近知ったコマンド「pbcopy」です。
何かを取得したりコマンドの結果を利用したいタイプに威力を発揮します。
これを知らなかったので、ターミナルでの計算結果をファイルに書き出してそれを読み込んで処理しようと、無駄なあがきをしたわけです。
exiftool -s パス | pbcopy
たったこれだけのコマンドを送り込めば、結果(この場合Exifデータを網羅したリスト)をクリップボードに収めてくれます。あとは目的のフィールドにペーストするだけ。csvファイルを介する必要なんかまったくありません。
-csvを使わずシェルに送るコマンドにpbcopyを利用することで、FileMakerとか固有アプリ関係なくデータを利用できます。応用範囲が広がるのではないでしょうか。
pbpaste はいまいちだった話
pbcopy と言えば pbpaste というコマンドもあります。ペーストのコマンドです。
FileMakerからAppleScriptを使ってターミナルにコマンドを送り込むとき、単純なコマンドなら「 do script with command 」を使います。コマンドが複雑なときはターミナルウインドウをアクティブにしてコピペします。このコピペは AppleScript でコピペのショートカットを再現するだけの原始的なスクリプトです。
原始的すぎるので「そうだ。カッコつけて pbpaste でやってみよう」と思って試してみたんです。結果は駄目でした。「そういうことじゃないんだよねー」というターミナル氏の薄ら笑いが目に浮かびますが、実際、そういうことじゃないのだろうなと思います。よくわかりませんが、素人の浅知恵でした。
ですので、AppleScript からターミナルにコマンドを送り込むのは、これまでどおりコピペのショートカットスクリプトを引き続き使うことにいたしました。
最初から仕切り直した
そんなわけで、Automatorを使ってcsvファイルを作成するやり方をポイと破棄して、仕切り直しました。
FileMakerのスクリプトから、AppleScriptを介してターミナルにコマンドを送り、その結果をクリップボードに収めた後にFileMakerのフィールドにペーストします。このシンプルさこそ最良の答えを見つけた証。
ということで、この投稿は「ターミナルで動くのにAutomatorのシェルではエラー」の続編、顛末を書いとかないといけないなと思いついて、他の投稿との内容被りを気にせず書きました。