#!/usr/bin/env bashが私のシステムで動作しないのはなぜですか?

#!/usr/bin/env bashが私のシステムで動作しないのはなぜですか?

彼らが文句を言ういくつかのインストールスクリプトを実行する際にいくつかの問題があります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 --version8.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または類似)。これにより、誤解を招く処理の問題が解決されます。

関連情報