1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CotEditorで編集したシェルスクリプトが動かなくなる問題の応急対策

Last updated at Posted at 2021-12-30

背景

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)

再現手順

  1. SwiftBar.appをダウンロードして起動、プラグインフォルダを指定
  2. SwiftBar.appのプラグインを取得
  3. 取得したプラグインのシェルスクリプトを、CotEditor.appで編集(たとえば改行入力→削除→保存)すると、メニューバーから表示が消える
  4. プラグインフォルダを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も重くていやなので、早くバグが修正されることを祈っています。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?