쉘 스크립트에서 소스 환경 변수를 에코로 볼 수 없는 이유는 무엇입니까?

쉘 스크립트에서 소스 환경 변수를 에코로 볼 수 없는 이유는 무엇입니까?

다음 쉘 스크립트가 있습니다.

cron_job.sh

#!/bin/bash

source /home/ec2-user/src/.config

나는 이것을 이렇게 사용한다./cron_job.sh

$DB_NAME.config에 포함 내용을 에코하면 아무것도 표시되지 않습니다. 복사 붙여넣기(소스 명령)를 잘라내면 이 값이 source /home/ec2-user/src/.config표시됩니다 echo $DB_NAME. 개념적으로 무슨 일이 일어나고 있는 걸까요? 그리고 무슨 일이 일어나고 있는지 이해하기 위해 매뉴얼 페이지를 어떻게 사용할 수 있습니까?

/home/ec2-user/src/.config

cat /home/ec2-user/src/.config
export DB_NAME="market"

echo_vars.sh

#!/bin/bash

echo $DB_NAME

껍데기

[ec2-user@ip-172-31-28-94 ~]$ cat /etc/redhat-release
Red Hat Enterprise Linux release 8.2 (Ootpa)
[ec2-user@ip-172-31-28-94 ~]$ echo "$SHELL"
/bin/bash
[ec2-user@ip-172-31-28-94 ~]$ ./cron_job.sh
[ec2-user@ip-172-31-28-94 ~]$ ./echo_vars.sh
[ec2-user@ip-172-31-28-94 ~]$
[ec2-user@ip-172-31-28-94 ~]$ echo $DB_NAME
[ec2-user@ip-172-31-28-94 ~]$
[ec2-user@ip-172-31-28-94 ~]$ source /home/ec2-user/src/goldbase/.config
[ec2-user@ip-172-31-28-94 ~]$ ./echo_vars.sh
app_db

답변1

을(를) 실행할 새 셸을 생성 중입니다 ./cron_job.sh. 다른 파일을 가져온 다음 종료됩니다.

종료 시 모든 변수 상태가 손실됩니다.

귀하와 귀하의 자녀에게만 내보내십시오. 따라서 프로세스가 종료되면 상태가 손실됩니다. 소스를 사용하면 스크립트가 동일한 프로세스에서 파일을 읽을 수 있으므로 변수가 보존됩니다. 그러나 프로세스가 종료되면 여전히 손실됩니다.

아래 파일에 echo를 넣으면 source작동됩니다.


환경 변수를 확인하지 않는다는 점에 유의하세요(할 수 있지만 관심이 없을 뿐입니다). 이 변수는 쉘에 의해 확장됩니다.

쉘 스크립트 이름은 .로 끝나서는 안 됩니다 .sh. 언젠가는 문제가 발생할 수 있습니다.

관련 정보