저는 다양한 구성요소를 컴파일하기 위해 쉘 스크립트를 사용하고 있습니다. 다른 쉘 스크립트를 호출하는 기본 스크립트가 있습니다. 여기에 예가 있습니다.
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에게 감사드립니다.