Bash 스크립트에서 명령 출력 평가가 작동하지 않습니다.

Bash 스크립트에서 명령 출력 평가가 작동하지 않습니다.

쉘 스크립트의 경로에 Homebrew를 자동으로 추가하려고 하는데 다음 두 줄은 쉘 스크립트에서 평가되지 않습니다.

#!/bin/sh
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"

두 번째 코드 줄은 [home]brew프로그램을 실행합니다.논쟁shellenv. 여러 환경 변수를 에코하여 설정한 다음 평가합니다. 첫 번째 줄은 단순히 두 번째 줄을 모든 쉘에 설정된 my ~/.profileso 의 PATH에 추가합니다.brew

이 명령문이 내 쉘 스크립트에서 작동하지 않는다는 것을 알았습니다.하지만터미널에 입력하면 이런 일이 발생합니다. 원인은 무엇일까요?

쉘 스크립트에서 Homebrew를 설치한 후 실행하라는 지시를 받은 명령을 실행해 보았지만 동일한 동작을 보였습니다.

유제:

답변1

스크립트를 실행하면 스크립트가 실행되는 호출 환경에서 상속된 로컬 환경이 생성되고, 스크립트가 종료되면 궁극적으로 소멸됩니다.

먼저 "평가하지 않음" 및 "작동하지 않음"을 통해 brew shellenv스크립트를 실행할 때 명령이 아무것도 출력하지 않는 것 같다는 것을 관찰했으므로 환경을 신뢰했다고 가정합니다.스크립트에서Homebrew와 함께 사용하기 위해 올바르게 초기화되지 않았습니다. (참고: 이 설명은 질문이 추가 설명으로 업데이트될 때까지 정확하지 않을 수 있습니다. 아래 구분 기호 뒤를 참조하세요.)

brew shellenv필요한 변수에 아직 올바른 값이 없는 경우 이 명령은 Homebrew에 적합한 환경 변수를 설정하는 셸 명령을 출력합니다.

얻을 수 있는 문서에는 brew help shellenv이 명령이 수행하는 작업이 정확히 설명되어 있습니다. 다음은 macOS에서 가져온 내용이지만 Linux에서도 비슷하게 읽을 수 있습니다(강조 추가).

용법:brew shellenv

수출 보고서를 인쇄합니다. 셸에서 실행하면 이 Homebrew 설치가 PATH, MANPATH및 에 추가됩니다 INFOPATH.

변수 HOMEBREW_PREFIX는 여러 번 쿼리하지 않도록 내보내집니다 HOMEBREW_CELLAR.HOMEBREW_REPOSITORY멱등성을 보장하기 위해 이 명령은 Homebrew binsbin디렉터리가 각각 파일의 첫 번째와 두 번째인 경우 출력을 생성하지 않습니다.PATH. 이 명령의 출력에 대한 평가를 도트 파일(예 ~/.profile: ~/.bash_profile또는 ~/.zprofile)에 추가하는 것을 고려해보세요.eval "$(brew shellenv)"

PATH위의 텍스트에 설명된 대로 bin변수에 이미 및 디렉토리가 포함된 환경에서 스크립트가 실행될 수 있습니다 .sbin


스크립트가 호출 쉘의 환경을 변경하도록 하려는 경우 .또는 를 사용하여 스크립트를 실행해야 합니다 source. 그러면 파일의 명령이 다음과 같이 됩니다.현재의환경(이것은 또한 #!라인이 무시된다는 것을 의미합니다).

이 점에 대해서는 다음도 참조하십시오.

관련 정보