テクノロジー · 実用ガイド
Bash の「bad interpreter」?変換前に shebang のバイトを確認する
CRLF、誤ったパス、実行環境の欠如、アクセス拒否を分けてから修正します。

bad interpreter は直接実行の境界を示す証拠であり、Bash 自体の故障とは限りません。Linux は実行可能スクリプトの先頭行をインタープリターのパスとして読みます。
最初から dos2unix、chmod、shebang 変更、bash script.sh を行わず、エラーと先頭バイトを保存し、ENOENT と EACCES を分けて最小限に直します。
エラーと先頭バイトを固定する
元のコマンドとメッセージを記録し、od -An -t x1 -N 64 script.sh などで先頭を確認します。CRLF は 0d 0a、LF は 0a です。
file、ls -l、ファイルシステムやコンテナーの文脈も残します。編集や再チェックアウトは証拠を消します。
カーネルが見るパスを解決する
#! の後をバイトどおりに読み、絶対パス、綴り、同じ実行環境での存在を確認します。スラッシュ欠落や user と usr の混同は CRLF ではありません。
/usr/bin/env を使う場合は env と対象プログラムが同じ文脈で解決するか確認します。
ENOENT、EACCES、回避を分ける
No such file はスクリプトまたはインタープリターを指し、CR が混じった名前も含みます。アクセスエラーは検索権限、形式、実行ビット、noexec を示します。
bash script.sh の成功は Bash が読める証明にすぎず、直接 shebang が正しい証明ではありません。
証明された最小修正を行う
0d 0a を確認した場合だけ LF に変換して再確認します。パス誤りは shebang だけ、ランタイム不在は意図したものを導入します。
EACCES では実行ビット、親ディレクトリ、ファイル形式、マウントを調べ、複数変更を混ぜません。
再発防止と直接実行テスト
クロスプラットフォームの Git では *.sh text eol=lf を検討し、クリーンな作業ツリーで差分を確認します。
元の文脈で直接実行し、インタープリター、バイト、チェックアウト方針を確認します。エラー分類が変われば別に診断します。
