忘れていたんです。シェルスクリプトがエラーを吐いて思ったような動作をしていませんでした。このエラーですね「 Operation not permitted 」
シェルスクリプトは動く、しかしエラー
正確に言うと、ターミナルでそのシェルスクリプトを実行するとエラーなく目的の動作を完了します。ところが、自動実行させるとエラーが出ます。何故でしょう?
本当にここのところずっと頭を悩ませていたんです。エラーが出る場所を探ると答えが隠れていました。スクリプトの基本的なコマンドは動作しています。ところが、 convert というコマンドで止まります。エラーを吐いてしまいます。このコマンドは、元々 zsh に含まれていたものではありません。私が、あとからインストールしたものです。
このコマンドは、 ImageMagick というコンポーネントの一部です。こいつが「 Operation not permitted 」と言っています。その前あるのは、「 unable to open image ‘XXXXX.jpg’」です。 convert が XXXXX.jpg を開けなくて、エラーになっていたんですね。じゃ、原因はなによ!
macOS 独特のパーミッションコントロール
答えを引っ張っても仕方ありませんので、答えを書くと「システム設定:プライバシーとセキュリティ:フルディスクアクセス」ここで ImageMagick に対してフルディスクアクセスの権限を与えていなかったことが原因です。
画像は私のシステム設定をキャプチャーしたものです。沢山のアプリに対してフルディスクアクセスの権限を与えています。画面に収まりきらないので一部だけです。
ターミナルにも権限を与えていますし、 zsh にも与えています。だから通常のコマンドは動作していました。ところが、私があとからインストールした ImageMagick には許諾をしていませんでした(システム設定では magick と表示されています)。なので、 ImageMagick に含まれている convert コマンドが XXXXX.jpg にアクセスしようとして、権限がないのでエラーになっていた。これが真相です。
チェックボックスを ON にして、パスワードを入力すれば、権限委譲の完成です。
基本に立ち返って、エラーメッセージを見る。これが大事ですね。パーミッションの問題であるというのは容易に想像つきますが、フルディスクアクセスにたどり着くまで実は少し時間がかかりました。
中級者には厳しい
このシステムになったのは、 version いくつだったか忘れてしまいましたが、標準ではターミナルも zsh ( macOS の標準は zsh ですね)も、フルディスクアクセスを許可されていません。 Linux をいじってから macOS に来た人にとってはかなり厳しい仕様だと思います。わかれば問題ないんですが、私みたいに以前それで躓いたにもかかわらず、忘れてしまったなんてバカにはちょいと引っかかりポイントになりますね。
もちろん、いい面もあります。簡単にはファイルにさわることができないので、安全であるとも言えますね。さじ加減の問題のように思いますが、ターミナルや zsh にも標準では権限委譲していないというのはキツいと思います。気がつかないと何にもいじれませんからね。
これいじるためには(私が知る限り) GUI を使うしかありません。 CUI ではできないんですよね。できるなら教えてください。
投稿者プロフィール
最新の投稿
- Mac2024年9月11日iPhone16Pro
- Linux2024年9月8日24.04 の Update ではまった
- ノン・カテゴリ2024年7月21日Kindle 世代交代
- Linux2024年7月7日convert → magick