#!/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또한 작동합니다.

휴대용 shebang을 작동시키기 위해 환경에서 누락된 것은 무엇입니까?

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또는 유사). 이렇게 하면 오해의 소지가 있는 처리 문제가 해결됩니다.

관련 정보