한 스크립트에서 변수 값을 가져와 다른 스크립트로 가져오는 방법은 무엇입니까? 하지만 문제는 변수 값을 얻으려는 스크립트에 실행하고 싶지 않은 일부 명령도 있다는 것입니다.
이것이 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 file
file
현재 쉘에서 실행되도록 쉘에 지시합니다.<(...)
프로세스 대체라고 합니다. 이를 통해 파일 이름 대신 명령의 출력을 사용할 수 있습니다.이 명령은
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