pngquant と Automator を使って Finder から秒で PNG を圧縮できるようにショートカットを作ろうとしたら一瞬つまづいたのでメモします。
先に答え
中括弧 {}
じゃなくて丸括弧 ()
を使え!
やりたいこと
- 出力ファイル名に quality の値とタイムスタンプを入れたい
–ext オプションをデフォルトにするとファイル名の後に -fs8
とつきますがどうせなら品質とタイムスタンプ(厳密にいつ出力したかわかる & 出力順に並ぶ)に変えたいと思いました。
![-ext オプションをデフォルトにしたときの出力ファイル名](https://masudakohboh.com/wp/wp-content/uploads/2023/05/CleanShot-2023-05-28-at-21.34.59.jpg)
最初のコード
とりあえず以下のように書いて走らせたら “Bad substitution” とエラーが出ました(チッ):
source ~/.zshrc
quality=90
TIME=${date +"%Y%m%d%H%M%S"}
/usr/local/bin/pngquant --quality=quality --ext -${quality}q-${TIME}.png --force $@
![エラーメッセージ: The action "Run Shell Script" encountered an error: "Zsh:7:bad substitution"](https://masudakohboh.com/wp/wp-content/uploads/2023/05/CleanShot-2023-05-28-at-21.33.35.jpg)
落とし穴
ググってみると、TIME= の行がダメっぽいということが判明。
変数に代入するときは中括弧 (Curly brackets) {}
ではなく丸括弧 (Parentheses) ()
を使うのがコツみたいです。
これでいけました:
source ~/.zshrc
quality=90
TIME=$(date +"%Y%m%d%H%M%S")
/usr/local/bin/pngquant --quality=quality --ext -${quality}q-${TIME}.png --force $@
オレンジの部分
![画像出力結果。](https://masudakohboh.com/wp/wp-content/uploads/2023/05/CleanShot-2023-05-28-at-21.35.22.jpg)
願い通りに quality
の値とタイムスタンプが出ました。長いですが重複して意図せず上書きしてしまうことがないので安心です(まあ –force 外せばいいんだろうけど)。あとどうせ使うやつだけ最終的に名前調整するのでね。
めでたしめでたし。
………
余談ですが、デスクトップやダウンロードフォルダみたいなアクセスしやすいところに Automator ファイルのエイリアスを置いておくと編集しやすいです
*個人の好みです
![](https://masudakohboh.com/wp/wp-content/uploads/2023/05/CleanShot-2023-05-28-at-21.50.31.jpg)