표적:소스 스크립트에서 생성된 환경 변수를 사용하는 Posix 호환 sh 스크립트를 생성합니다.
/dir/var.sh환경 변수를 생성하려면 다음 항목만 포함하세요.
export IPTABLES="/usr/sbin/iptables"
/dir/startup.sh다음 내용이 포함되어 있습니다.
#!/bin/sh
. /dir/var.sh
$IPTABLES options
command1 #Does not use an environmental variable
완료되면 startup.sh
변수가 생성되지 않거나 존재하지 않습니다. 왜?
참고: 운영 체제 펌웨어는 읽기 전용입니다. 모든 쉘에 사용 가능한 환경 변수를 설정하기 위해 /etc/profile 파일을 편집하는 것은 허용되지 않습니다. 변수를 내보내는 스크립트는 너무 늦게 실행됩니다.
답변1
보다관련 위키피디아 페이지:
Unix에서는 스크립트나 컴파일러에서 변경된 환경 변수가 해당 프로세스와 하위 프로세스에만 영향을 미칠 수 있습니다. 상위 프로세스나 관련 없는 프로세스는 영향을 받지 않습니다.
조달(*)에는 현재 프로세스에 스크립트가 포함되어 있습니다. var.sh
따라서 스크립트에 정의된 환경변수는 스크립트 내에서 확인할 수 있습니다 startup.sh
.
OTOH, startup.sh
소스가 아니라 호출됩니다. 따라서 WP 페이지에서 언급했듯이 이는 하위 프로세스입니다. 이 스크립트에서 생성된 모든 변수는 스크립트가 끝나면 삭제됩니다.
(*) source script.sh
또는 . script.sh
. OP 의견의 다른 사람들이 언급했듯이 소스 스크립트에 대한 상대 경로를 지정하는 것은 . ./dir/var.sh
호출 위치에 따라 다르기 때문에 나쁜 생각입니다 startup.sh
.