[unix] 시스템에서 #! / 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잘 작동합니다.

휴대용 shebang이 작동하도록 환경에서 누락 된 것은 무엇입니까?

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 설정이 아니므로 로컬에서 무언가를 수정해야합니다. 수행 한 작업과 다른 유사한 문제를 일으킬 수 있는지 확인하십시오.


답변

여기 (Fedora 23) /bin/usr/bin; 비슷한 설정을 사용하면 기호 링크 /usr/bin/env가 무한 루프를 구입합니다.

관련 패키지를 확인한 rpm -qf /usr/bin/env /bin/env후 다시 설치하십시오 (여기서 coreutils, yum reinstall coreutils또는 이와 유사한 패키지 ). 그것은 잘못 인도 된 사람을 고쳐야합니다.


답변