다른 스크립트에서 스크립트를 실행하면 작동하지 않습니다.

다른 스크립트에서 스크립트를 실행하면 작동하지 않습니다.

저는 다양한 구성요소를 컴파일하기 위해 쉘 스크립트를 사용하고 있습니다. 다른 쉘 스크립트를 호출하는 기본 스크립트가 있습니다. 여기에 예가 있습니다.

Repo/build.sh
Repo/code/mode/1/build/build_1.sh

Repo/code/mode/1/build/이제 폴더 로 이동하여 스크립트를 실행하면 build_1.sh작동합니다.

build_1.sh그러나 스크립트가 호출되면 build.sh빌드가 작동하지 않습니다.

#!/bin/bash
#!/usr/bin/env bash
REPO=/home/${USER}/project
set -o errexit
set -o nounset
set -o pipefail

(cd ${REPO}/code/mode/1/build/; ./build_1.sh)

위의 방법이 작동하지 않는 이유는 무엇일까요? env가 이미 설정되어 있다고 생각하십시오 REPO.

답변1

문제는 설정할 때이다.REPO 쉘 변수export , 당신은 그렇게 되기 위해 이것을 하는 것이 아닙니다환경 변수.

안타깝게도 아직 세부정보를 제공하지 않으셨습니다.어떻게build_1.sh내에서 호출하면 빌드가 작동하지 않지만 build.sh슬레이브 스크립트가 해당 REPO변수에 의존하는 경우 슬레이브 스크립트를 내보내지 않으면 볼 수 없기 때문에 문제가 발생합니다.

구제책은아마도 (내가 말했듯이 질문에는 아직 세부 사항이 부족합니다.) 실제로 변수를 내보내는 중입니다. 이렇게 하려면 다음과 같이 명시하세요.

export REPO=/home/${USER}/project

귀하의 스크립트에서.

이 답변의 이전 버전에 대한 추론의 근본적인 오류를 지적한 @ilkkachu에게 감사드립니다.

관련 정보