시스템에서 #! / 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]#

규칙적인 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입니다.


1
일반적으로 이는 줄의 캐리지 리턴 / 줄 바꿈으로 인해 발생합니다. 또는 env 위치 .
Thomas Dickey

답변:


7

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


이것은 정확 /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

경우 /bin에 대한 심볼릭 링크이었다 /usr/binconorgriffin의 시스템에 다음 /usr/bin/env/bin/env같은 파일이 될 것입니다.
Gilles 'SO- 악마 그만해'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.