彼らが文句を言ういくつかのインストールスクリプトを実行する際にいくつかの問題があります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]#
通常のshebangを使用するようにスクリプトを変更すると、#!/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で、オペレーティングシステムはRed Hat Enterprise Linux Serverバージョン6.6です。
答え1
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設定ではないため、ローカルで一部を変更する必要があります。自分が行ったことと、他の同様の問題が発生するかどうかを確認してください。
答え2
だから...似たようなエラーが発生していますが、/usr/bin/shが見つからず、実行したいスクリプトを実行すると見つからないというメッセージも表示されます。 / usr / binでshの場所を確認しましたが、あまりにも混乱して答えを見つけにここに来ました...
私の場合、UltraEditで編集中にDOS CR LFをUnix LFに変換することを忘れていました。保健省!
これを実行してスクリプトを再インポートすると、shが大丈夫であることがわかります。まだ解決しなければならない他の問題が残っていますが、この不明な問題は解決されました。
答え3
ここ(Fedora 23)/bin
はシンボリックリンクです/usr/bin
。同様の設定を使用した場合、シンボリックリンクは/usr/bin/env
無限ループを提供します。
関連パッケージ(例:)を確認しrpm -qf /usr/bin/env /bin/env
て再インストールします(coreutils
例:ここyum reinstall coreutils
または類似)。これにより、誤解を招く処理の問題が解決されます。