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


11

彼らが不満を言ういくつかのインストールスクリプトを実行すると、私はいくつかの問題に遭遇しました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です。


1
通常、これは行の改行/改行が原因です。または、envの場所
Thomas Dickey

回答:


7

ls -lL /usr/bin/envシンボリックリンクが壊れていることを示しています。これが、シバン行が機能しない理由を説明しています。カーネルがぶら下がっているシンボリックリンクを実行しようとして、明らかに失敗しています。

/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セットアップではないため、ローカルで何かを変更している必要があります。あなたが何をしたのか、それが他の同様の問題を引き起こしていたのかどうかを調べてみてください。


これは正しい/usr/binです。別のファイルシステムに移動され、へのシンボリックリンクです/vol_01/usr/bin
conorgriffin

-1

ここ(Fedora 23)/binはへのシンボリックリンク/usr/binです。同様の設定/usr/bin/envがある場合、からのシンボリックリンクは無限ループを購入します。

つまりrpm -qf /usr/bin/env /bin/env、関連するパッケージを確認し、それらを再インストールします(ここではcoreutils、つまりyum reinstall coreutils類似のもの)。これにより、誤操作されたマンハンドリングが修正されます。


すでに再インストールしましたcoreutilsが、違いはありませんでした。それはかなり奇妙です。/usr/bin/envターゲットへの相対パスを持つシンボリックリンク../../bin/envです。したがって、/bin/envそれも存在するはずです。そのシンボリックリンクが機能しない理由がわかりません。/bin/env絶対パスでポイントするようにターゲットを置き換えましたが、うまくいったようです。
conorgriffin 2016年

IFが/binへのシンボリックリンクだった/usr/bin、その後、conorgriffinのシステム上/usr/bin/env/bin/env同じファイルになります。
Gilles 'SO-悪をやめる' 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.