背景
Rebuild.fmの第292回で、SwiftBarというツールが紹介されていました。
macOSのメニューバーのカスタマイズツールで、シェルスクリプトの標準出力をメニューバーに出してくれます。

これは便利そうだとおもい、サンプルスクリプトをいじりはじめたら、思い通りに動かなくてハマりました。
けっきょく、エディタのCotEditorが原因(そもそもはmacOS Montereyのバグ)だということが判明しました。
環境
ここで書いていることは、下記のバージョンで実施しました。
- Xcode Version 13.2.1 (13C100)
- VS Code バージョン: 1.63.2
- CotEditor バージョン4.0.9 (473)
- macOS Monterey 12.1
- MacBook Pro (13-inch, 2020, Four Thunderbolt 3 Ports)
再現手順
-
SwiftBar.app
をダウンロードして起動、プラグインフォルダを指定 -
SwiftBar.app
のプラグインを取得 - 取得したプラグインのシェルスクリプトを、
CotEditor.app
で編集(たとえば改行入力→削除→保存)すると、メニューバーから表示が消える - プラグインフォルダを
terminal
で開き、$ ./xxxxx.sh
と実行すると、下記のエラーメッセージが出る
$ -bash: ./xxxxx.sh: /bin/bash: bad interpreter: Operation not permitted
なお、実行権限は付与済($ chmod +x xxxxx.sh
)。
原因
CotEditorのGitHubリポジトリでイシューが上がっています。
quarantine extended attribute gets set on every save using macOS Monterey #1216
サンドボックス化されたアプリでファイル(シェルスクリプト)を編集すると、quarantine attribute(隔離属性)のフラグが立ってしまい、これはMontereyのバグであるっぽいとのことです。
対策
1. 隔離属性を変える
$ xattr -d com.apple.quarantine ~/xxxx/xxxxx.sh
として、シェルスクリプトの隔離を外します。ただし、いちどでもCotEditor.app
で編集すると、また隔離されてしまうので、けっこうめんどうくさいです。
2. 他のエディタで編集する
Xcode.app
はOKなので(編集しても隔離されない)、シェルスクリプトをいちど開いて、保存すれば、隔離から外され、シェルスクリプトが動くようになります。
Text Edit.app
はNG。
VS Code
はOKだとおもったのですけれども、何かのタイミングでダメ(実行不可)になって、条件判定ができていません。
おわりに
原因判明に意外と時間がかかったので、記録しておきます。
わたしの検索能力がいまいちなのか、シェルスクリプトを
CotEditor
で編集する人があまりいないのか、そもそもmacOSでシェルスクリプトを編集して使う人がそんなにいないのか、わかりませんけれども。
シェルスクリプトをいじるのに毎回Xcode
も重くていやなので、早くバグが修正されることを祈っています。