쉘 스크립트를 통해 상위 쉘에서 하위 쉘로 변수 전달

쉘 스크립트를 통해 상위 쉘에서 하위 쉘로 변수 전달

상위 셸(루트)에서 다음 명령을 실행합니다.

SESSION_RECORD=started

산출:

echo $SESSION_RECORD
started

그런데 쉘 스크립트에서 상태를 확인해 보니 값이 할당되어 있지 않습니다. 나는 그것이 자식을 생성하고 스크립트를 실행한다는 것을 알고 있습니다. 그래서 변수를 허용하지 않습니다.

이것을 상위 쉘에서 하위 쉘로 가져올 수 있는 방법이 있습니까? 루트 변수가 동적이기 때문에 내보내기를 사용하고 싶지 않습니다.

참조 스크립트:

#!/bin/bash

session=`echo $SESSION_RECORD`
echo $session
if [ "$session" == "started" ]
then
echo "screen records"
else
echo "screen not started"
fi

기본적으로 내 스크립트는 변수의 값을 확인하고 일치하는 경우 루프를 입력하고 명령을 추가로 실행해야 합니다.

변수 값은 SESSION_RECORD동적으로 변경되므로 해당 값을 기반으로 스크립트를 실행해야 합니다.

답변1

내보낼 때 변수 값을 설정할 필요가 없습니다. 넌 할 수있어:

SESSION_RECORD=started
echo "Now some other stuff"
export SESSION_RECORD && ./myscript

SESSION_RECORD현재 값을 스크립트로 내보냅니다 .

답변2

스크립트를 함수로 만들면 실행 시 하위 쉘이 생성되지 않으므로 변수에 액세스하는 것이 제대로 작동합니다. 어쩌면 이것이 당신에게 효과가 있을까요?

예:

$ cat test.sh
#!/bin/bash

function foo() {
  echo $foo
}
$ source test.sh
$ foo=5
$ foo
5
$ foo=4
$ foo
4
$

관련 정보