한 스크립트에서 변수 값을 가져와 다른 스크립트로 가져오는 방법은 무엇입니까?

한 스크립트에서 변수 값을 가져와 다른 스크립트로 가져오는 방법은 무엇입니까?

한 스크립트에서 변수 값을 가져와 다른 스크립트로 가져오는 방법은 무엇입니까? 하지만 문제는 변수 값을 얻으려는 스크립트에 실행하고 싶지 않은 일부 명령도 있다는 것입니다.

이것이 script1.sh라고 가정해 보겠습니다.

variable="Hello"
#some command here e.g. yum check-update

script2.sh에서:

echo $var

EXPORT 명령을 사용하고 ./script1.sh를 script2.sh에 넣는 방법을 찾았지만 다른 명령이 실행됩니다.

그렇다면 변수 내에서 명령을 실행하지 않고 변수 값을 얻으려면 어떻게 해야 합니까? 이 질문이 명확해지기를 바랍니다. 미리 감사드립니다!

답변1

script1.sh요약하자면, 의 모든 명령을 실행하지 않고 의 값을 검색하려고 합니다 script1.sh. 나는 이것이 script1.sh귀하의 통제하에 있지 않다고 가정합니다. 공급 업체가 제공했거나 완고한 동료가 관리했거나 유사한 문제로 인해 script1.sh그대로 사용해야하기 때문일 수 있습니다.

두 가지 방법을 소개하겠습니다. 첫 번째는 script1.sh한 번에 하나씩 특정 변수를 가져오는 데 좋습니다.

var=$(awk -F'"' '/^variable=/ {print $2}' script1.sh )
echo $var

읽기 용입니다 awk(실행하지 않고 읽기만 함) script1.sh. awk로 시작하는 줄을 찾아 variable=해당 줄의 큰따옴표 뒤에 나타나는 내용을 작성하세요. 의 출력은 awk변수로 캡처됩니다 var.

더 자세하게:

  • 이 선언은 형식입니다 var=$(...). 이는 대괄호 안의 모든 항목이 bash 명령으로 실행되고 해당 표준 출력이 변수에 할당됨을 의미합니다 var.

  • 괄호 안에는 awk다음 명령이 있습니다 awk -F'"' '/^variable=/ {print $2}' script1.sh. 부분적으로 생각해 봅시다.

  • awk행(레코드)을 필드로 분할합니다. -F'"'필드 구분 기호로 큰따옴표를 사용하도록 awk에 지시합니다.

  • /^variable=/awk로 시작하는 줄로 작업을 제한하도록 지시합니다 variable=. 따라서 기타 명령은 모두 script1.sh무시됩니다.

  • {print $2}두 번째 필드를 인쇄하도록 지시합니다 awk. 이는 큰따옴표 문자의 첫 번째 발생과 두 번째 발생 사이의 모든 것을 의미합니다.

  • 마지막 매개변수는 awk읽을 파일을 알려줍니다 script1.sh.

위의 방법은 한 번에 하나의 변수로 작업하는 데 적합하며 필요에 따라 변수 이름을 바꿀 수 있습니다.

다양한 변수를 다루는 방법

에 모든 변수를 할당하려면 script1.sh다음을 고려하세요.

source <(grep -E '^\w+=' script1.sh)

이는 변수 할당처럼 보이는 모든 줄을 grep추출 하는 데 사용됩니다 . script1.sh그런 다음 이 행은 현재 셸에서 실행되고 변수가 할당됩니다.

이 방법을 사용하는 경우 먼저 모든 변수가 필요한지, 수행 중인 작업을 방해하는 변수가 없는지 확인하십시오. 그러한 경우가 있으면 grep두 번째 명령을 사용하여 제외할 수 있습니다.

각 부분을 차례로 고려하십시오.

  • source filefile현재 쉘에서 실행되도록 쉘에 지시합니다.

  • <(...)프로세스 대체라고 합니다. 이를 통해 파일 이름 대신 명령의 출력을 사용할 수 있습니다.

  • 이 명령은 grep -E '^\w+=' script1.sh변수 할당처럼 보이는 모든 줄을 추출합니다. 명령줄에서 이 명령을 단독으로 실행하면 다음과 비슷한 내용이 표시됩니다.

    variable="Hello"
    var2="Value2"
    

    등. 먼저 이 작업을 수행하고 출력을 확인하여 실행하려는 라인이 맞는지 확인해야 합니다.

답변2

이를 수행하려면 세 가지 스크립트를 사용해야 합니다.

cat ./script/init_vars.sh
    variable_1=value_1
    variable_2=value_2
    variable_3=value_3

cat ./script/module_1.sh
    . ./script/init_vars.sh
    printf %s\\n "$variable_1"

cat ./script/module_2.sh
    . ./script/init_vars.sh
    printf %s\\n "$variable_1"

파일이 다음과 같은 경우^그거^그러면 정규식에 의존하지 않고도 더 쉽게 작업을 수행할 수 있습니다. 실행 중이 module_1.sh거나 module_2.sh다음이 출력됩니다.

value_1

답변3

source다른 쉘 파일의 파일 변수를 읽는 데 사용됩니다 .

변수가 다음 var1과 같이 초기화되었다고 가정합니다./pathtoFile1/file1.sh

var1='Sridhar'

다른 스크립트에서 file2.sh:

source /pathtoFile1/file1.sh
var2=$var1

이제 값이 var2포함되어 있습니다 .var1

관련 정보