bad interpreter
について不満を言うインストールスクリプトを実行すると、いくつかの問題が発生しました。
ささいな例を作りましたが、何が問題なのかわかりません。以下を参照してください。
#!/usr/bin/env bash
echo "hello"
上記のスクリプトを実行すると、次のエラーが発生します
[root@ech-10-24-130-154 dc-user]# ./junk.sh
bash: ./junk.sh: /usr/bin/env: bad interpreter: No such file or directory
/usr/bin/env
ファイルが存在します。以下を参照してください:
[root@ech-10-24-130-154 dc-user]# ls -l /usr/bin/env
lrwxrwxrwx 1 root root 13 Jan 27 04:14 /usr/bin/env -> ../../bin/env
[root@ech-10-24-130-154 dc-user]# ls -l /bin/env
-rwxr-xr-x 1 root root 23832 Jul 16 2014 /bin/env
[root@ech-10-24-130-154 dc-user]#
通常のシバン#!/bin/bash
を使用するようにスクリプトを変更しても問題ありません。 #!/bin/env bash
も機能します。
ポータブルシバンを機能させるために、環境に欠けているものは何ですか?
ls -lL /usr/bin/env
はls: cannot access /usr/bin/env: No such file or directory
を返すので、シンボリックリンクを変更する必要があると思いますか? /bin/env
をポイントできますか?
env --version
は8.4で、OSはRed Hat Enterprise Linux Serverリリース6.6です。
ls -lL /usr/bin/env
は、シンボリックリンクが壊れていることを示します。これが、Shebang行が機能しない理由を説明しています。カーネルは、ぶら下がっているシンボリックリンクを実行しようとし、明らかに失敗しています。
/usr/bin/env -> ../../bin/env
は、/usr
および/usr/bin
が両方とも実際のディレクトリ(シンボリックリンクではない)である場合に正しいです。明らかに、これはあなたのマシンには当てはまりません。多分/usr
はシンボリックリンクですか? (明らかに、これは/
へのシンボリックリンクではありません。そうでない場合、/usr/bin/env
は/bin/env
と同じファイルであり、シンボリックリンクではありません)。
そのシンボリックリンクを修正する必要があります。あなたはそれを絶対リンクにすることができます:
Sudo ln -snf /bin/env /usr/bin/env
相対リンクにすることもできますが、行う場合は、それが正しいことを確認してください。 /usr/bin
に切り替えてls -l relative/path/to/bin/env
を実行し、シンボリックリンクを作成する前にそれが正しいことを確認します。
これはデフォルトのRHELセットアップではないため、ローカルで何かを変更している必要があります。あなたが何をしたのか、それが他の同様の問題を引き起こしていたのかどうかを調べてみてください。