그들이 불평하는 일부 설치 스크립트를 실행하는 데 몇 가지 문제가 있습니다 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이고 운영 체제는 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
또는 유사). 이렇게 하면 오해의 소지가 있는 처리 문제가 해결됩니다.