Operation not permitted

忘れていたんです。シェルスクリプトがエラーを吐いて思ったような動作をしていませんでした。このエラーですね「 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 ではできないんですよね。できるなら教えてください。

投稿者プロフィール

kaizawa
kaizawaブロガー
新潟県在住。1964年生まれ、東京オリンピックの年ですね。
突然燃え上がったり、鎮火したり興味の波が激しいので注意が必要です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA